【问题标题】:How to handle promises for mongoose?如何处理猫鼬的承诺?
【发布时间】:2016-12-16 16:29:33
【问题描述】:

我是 mongoose 的新手,我只想了解一旦我们从客户端获得数据,如何使用带有 mongoose 模式的 nodejs 来保存和处理承诺。在下面的示例中,如果发生任何错误,尝试将数据保存到集合句柄承诺。

model.js

var mongoose = require('bluebird').promisifyAll(require('mongoose'));

var UserAccessSchema = new mongoose.Schema({
  firstname: String,
  lastname: String,
  uid: String,
  email: String,
});

export default mongoose.model('UserAccess', UserAccessSchema);

controller.js

var UserAccess = require('./access.model');

export function create(req, res) {
  console.log(req.body);
  UserAccess.createAsync(req.body)
    .then()
    .catch();

}

index.js

var express = require('express');
var controller = require('./access.controller');
var router = express.Router();

router.post('/', controller.create);

module.exports = router;

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    你必须 Promise.promisifyAll 你想访问异步对象的对象。

    比如这样:

    var Promise = require('bluebird')
    var mongoose = require('mongoose');
    
    var UserAccessSchema = new mongoose.Schema({
      firstname: String,
      lastname: String,
      uid: String,
      email: String,
    });
    
    var model = mongoose.model('UserAccess', UserAccessSchema);
    
    model = Promise.promisifyAll(model)
    
    export default model;
    

    这样,您将创建具有适当async 方法的模型。

    但是,为了清楚起见,您不需要 bluebird 来使用带有 bluebird 的 Promises。

    您实际上可以在查询 .exec() 之后附加该方法以返回一个 Promise。

    您可以参考文档中的section

    【讨论】:

    • 我认为您不需要 .exec() 。我做的事情就像Model.find().then(function(docs){})
    • @jackblank 查询是 thenable 的,但这并不意味着它是一个承诺。例如,您没有 catch 方法。
    猜你喜欢
    • 2020-10-04
    • 2015-05-12
    • 1970-01-01
    • 2012-12-14
    • 2017-06-15
    • 2019-06-04
    • 2017-08-18
    • 2021-05-24
    • 2018-02-15
    相关资源
    最近更新 更多