【问题标题】:Callback data out of mongoose querymongoose 查询中的回调数据
【发布时间】:2014-11-29 08:08:29
【问题描述】:

我想将koa与mongodb和mongoose一起使用,代码如下:

var getMessage = function*(params) {
  var messages = MessageModel.find({
    to: params.to
  }, function(err, m) {
    if (err) return console.error(err);
    // How to get the data out of here to work with them?
    console.log(m);
  });

  yield messages.fields;
}

app.get('/message/to/:to', function*(next) {
  this.body =
    yield getMessage(this.params);
});

函数本身有效。这意味着,数据打印在控制台上,但我不知道如何从函数中获取数据,以便使用它们。最好的方法是什么?

【问题讨论】:

    标签: node.js mongodb mongoose koa


    【解决方案1】:

    您可以使用 .find().exec() 返回的承诺而不使用生成器:

    var getMessage = function (params) {
      return MessageModel.find({
        to: params.to
      }).exec();  
    }
    
    app.get('/message/to/:to', function*(next) {
      this.body = yield getMessage(this.params);
    });
    

    或者在生成器中产生 promise 并返回你想要的值:

    var getMessage = function*(params) {
      var data = yield MessageModel.find({
        to: params.to
      }).exec();
    
      return data;
    }
    

    请查看http://blog.stevensanderson.com/2013/12/21/experiments-with-koa-and-javascript-generators/,了解有关您可以产出的更多信息。

    【讨论】:

      【解决方案2】:

      免责声明:我不知道 koa。

      您是否尝试过兑现承诺? https://github.com/LearnBoost/mongoose/issues/1859

      var getMessage = function*(params) {
        var mPromise = MessageModel.find({
          to: params.to
        }).exec();
        yield mPromise;    
      }
      
      app.get('/message/to/:to', function*(next) {
        this.body =
          yield getMessage(this.params);
      });
      

      【讨论】:

      • 感谢您的回答。它帮助很大。使用 exec() 函数,它起作用了。 :)
      • 另外。我唯一要做的就是将“this.body = yield getMessage(this.params)”这一行编辑为“this.body = yield getMessage(this.params).next();”。使用“next()”显示数据。
      猜你喜欢
      • 2014-06-20
      • 2018-06-12
      • 2014-03-20
      • 2019-11-30
      • 1970-01-01
      • 2014-10-21
      • 2019-08-29
      • 1970-01-01
      • 2018-01-17
      相关资源
      最近更新 更多