首页 > 网站 > WEB开发 > 正文

koa中使用mongoose出现的问题

2024-04-27 14:14:08
字体:
来源:转载
供稿:网友

koa中使用mongoose出现的问题

转载请注明:TheViperhttp://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);


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表