首页 > 代码库 > koa中使用mongoose出现的问题
koa中使用mongoose出现的问题
转载请注明: TheViper http://www.cnblogs.com/TheViper
先看下面例子
this.login=function *(){
....... var q=userModel.findOne({email:name,pwd:pwd}); q.select(‘_id‘); q.exec(function (err, id) { if (err) return handleError(err); this.body=id; });}
这是一个ajax登陆,但是响应会返回not found.
问题的症结很好判断,就是没有返回响应。为什么会没有返回响应?
这也很容易判断,因为q.exec里面的回调并没有执行this.body.具体的,mongoose的查询q.exec是一个异步操作,而另外一边koa却不管这个异步操作是否完成,就直接按照它的generator中间件模式运行到底了.
解决方法很简单,就是把mongoose的查询变成koa的generator中间件,并添加到koa中,koa就不会忽略mongoose的查询的存在了。
可以把q.exec改写成thunk形式就可以了
function execQuery(query) { return function(fn){ query.exec(function (err, res){ if (err) return fn(err); fn(null,res); }); }}
q=userModel.findOne({email:name,pwd:pwd});q.select(‘_id‘);this.body=yield execQuery(q);
koa中使用mongoose出现的问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。