【问题标题】:[Mongoose]Override toJSON with data from an async query[Mongoose]使用来自异步查询的数据覆盖 toJSON
【发布时间】:2013-10-04 16:08:05
【问题描述】:

我的架构如下:

var CompanySchema = new Schema({
  //
});

CompanySchema.methods.getProducts = function(next) {
  var Product = require(...);
  Product.find({...}).exec(function(err, products) {
    if (err) 
      return next(err)
    return next(null, products || []);
  });
};

我想知道在序列化 Company 对象时是否有某种方法可以包含 getProducts() 方法的结果,例如:

CompanySchema.methods.toJSON = function() {
  var obj = this.toObject();
  obj.products = this.getProducts();
  return obj;
};

提前谢谢你。

【问题讨论】:

  • 不同步,不。
  • 你能再解释一下你的问题吗?你到底想达到什么目标?

标签: node.js mongodb mongoose


【解决方案1】:

当然,您可以包含它,只是不能同步地替换 toJSON

原因是您不能在同步方法中使用异步方法(例如来自 Mongoose 的 find),例如 toJSON

所以你需要让它异步:

CompanySchema.methods.toJSONAsync = function(callback) {
  var obj = this.toObject();
  this.getProducts(function(products) {
    obj.products = products;
  });
  callback(obj);
};

【讨论】:

    猜你喜欢
    • 2016-08-12
    • 2015-07-08
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多