[Mongoose]使用来自异步查询的数据覆盖toJSON

时间:2013-09-28 11:20:29

标签: node.js mongodb mongoose

我的架构如下:

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;
};

提前谢谢。

1 个答案:

答案 0 :(得分:1)

当然,您可以将其包含在内,而不是同步替代toJSON

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

所以你需要让它异步:

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