Mongoose - 为所有模式实现一个函数(不在每个模式上)

时间:2018-02-13 17:21:10

标签: node.js mongodb mongoose mongoose-schema

我已经看到很多示例,其中展示了如何在模式上实现自定义转换函数(例如toJSON(),但可能是另一个名称)。

但我不想继续为“每个”架构复制代码。有没有办法在全局实现它一次,这样它将自动被所有模式继承?

以下是我想要的toJSON()示例。

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

/**
 * toJSON implementation
 */
Schema.options.toJSON = {
  transform: function(doc, ret, options) {
    ret.id = ret._id;
    delete ret._id;
    delete ret.__v;
    return ret;
  }
};

我想添加一些额外的“全局”功能,如上图所示。

更新2018.02.13 :我在不同的模块中定义我的模型(模式)(每个模块都有自己的.js文件)。例如,我将有一个account/schema.js模块,一个profile/schema.js模块等等。我的应用程序中至少有30多个模式。

1 个答案:

答案 0 :(得分:2)

修改:您可能也对Mongoose Plugins感兴趣。

-

您可以在共享模块中定义该功能,并在您定义模式的任何位置导入该模块。然后,您可以通过将架构[{1}}设置为此中央共享toJSON功能来实现您的目标。

toJSON

-

/** sharedFunctions.js **/
function toJSON(...) { ... }
module.exports = { toJSON: toJSON }