码迷,mamicode.com
首页 > 其他好文 > 详细

koa中使用mongoose出现的问题

时间:2015-01-12 00:23:40      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:

转载请注明: 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出现的问题

标签:

原文地址:http://www.cnblogs.com/TheViper/p/4217082.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!