【问题标题】:How could I bind `save` method using `Q` with mongoose我如何使用`Q`与猫鼬绑定`save`方法
【发布时间】:2014-07-04 18:31:27
【问题描述】:

说我在User.js中有以下架构

var mongoose = require('mongoose');
var Q = require('q');

var userSchema = new mongoose.Schema({
  phone: {
    type: Number,
    require: true,
    index: {
      unique: true
    }
  }
});
module.exports = mongoose.model('User', userSchema);
module.exports.findOne = Q.nfbind(module.exports.findOne.bind(module.exports));
module.exports.find = Q.nfbind(module.exports.find.bind(module.exports));

还有另一个文件testuser.js

var mongoose = require('mongoose');
var Q = require('q');
var User = require('../User');

var connectionStr = "mongodb://localhost:27017/user-model-test";
mongoose.connect(connectionStr, function(error) {
  if (error) {
    throw(error);
  }
  console.log("Connect to MongoDB...");
  var testuser = new User({
    phone: 1008611,
  });
  testuser.save = Q.nfbind(testuser.save.bind(testuser));
  testuser.save().then(function () {
    return User.findOne({ phone: 1008611 }).then(function (user) {
      console.log(user.phone);
      mongoose.disconnect();
    }, function (error) {
      throw(error);
    });
  }, function (error) {
    throw(error);
  }).done();
});

请注意,目前我使用testuser.save = Q.nfbind(testuser.save.bind(testuser)); 绑定save,但我想在User.js 中进行绑定,例如module.exports.find = Q.nfbind(module.exports.find.bind(module.exports));,有什么办法可以做到吗?

谢谢。

【问题讨论】:

    标签: node.js mongoose promise q


    【解决方案1】:

    如果你坚持 Q,我会这样做:

    User.create = function(data){
        var u = new User(data);
        u.save = Q.nfbind(testuser.save.bind(testuser));
        // add other methods you want
        return u;
    };
    

    但是,我想补充一点,如果您对所有其他 Mongoose 方法调用 .exec(),它们已经返回了一个承诺(所以 .find(..).exec() 返回一个 mpromise 承诺)。也就是说,Mongoose 已经提供了一个 Promise API,save 是目前唯一没有包含的方法之一and there are plans to include it

    知道这与 Bluebird 成为一个单一的衬里也是有益的,Bluebird 有一个 promisifyAll 函数,可以创建更容易调试并且比 Qs 或 Mongoose 更快的 Promise。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-11
      • 2023-01-20
      • 1970-01-01
      • 2019-04-13
      • 2017-03-28
      • 2012-05-19
      • 2012-12-14
      • 2012-03-21
      相关资源
      最近更新 更多