zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    Python方法
    Cpp求PI
    Asp.net身份验证和授权
    [转] 魔兽系列事件报道
    directxsdk aug 2006
    [转]转变的开始!NVIDIA更换新Logo
    wxWidgets 2.7.0 released
    OpenGL 和 Vista(续)
    暴雪员工的跳槽纪录
    3D版的星际争霸
  • 原文地址:https://www.cnblogs.com/TheViper/p/4217082.html
Copyright © 2011-2022 走看看