本篇文章主要介绍了"koa中使用mongoose出现的问题",主要涉及到方面的内容,对于Javascriptjrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下:
转载请注明: TheViper http://www.cnblogs.com/TheViper 先看下面例子this.login=function *(){ ...
转载请注明: 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出现的问题,包括了方面的内容,希望对Javascriptjrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播有兴趣的朋友有所帮助。
本文网址链接:http://www.codes51.com/article/detail_105595.html