首页 > 解决方案 > 在运行时为 Mongoose 添加全局插件

问题描述

我目前正在尝试在运行时附加一个全局猫鼬,但没有运气。我的插件需要在我的应用程序启动时生成一些依赖项和选项,因此我需要按顺序添加它。Mongoose 似乎忽略了封装在闭包中的所有内容。

const mongoose = require('mongoose');

const config = {};
const {DB_CONNECT} = process.env;

const myPlugin = schema => {
  console.log('done'); // this line is not logged at all
  schema.methods.mymethod = () => {};
}

const connectAndAddPlugins = async () => {
  await mongoose.connect(
    DB_CONNECT,
    {...config}
  );
  mongoose.plugin(myPlugin)
};

connectAndAddPlugins();

任何帮助将不胜感激。

标签: node.jsmongodbexpressmongoose

解决方案


显然,由于模型被编译并加载了 Mongoose 全局插件不再附加,因此模型应该在之后注册:

const mongoose = require('mongoose');

const config = {};
const {DB_CONNECT} = process.env;

const myPlugin = schema => {
  console.log('done'); // this line is not logged at all
  schema.methods.mymethod = () => {};
}

const connectAndAddPlugins = async () => {
  await mongoose.connect(
    DB_CONNECT,
    {...config}
  );
  mongoose.plugin(myPlugin)
};

const loadModels = () => {
  const model = mongoose.model('Cat', { name: String });
}

connectAndAddPlugins();
loadModels();

推荐阅读