当前位置: 首页 > 知识库问答 >
问题:

mongoose:使用npm/node_modules中的模块提供的模型或模式

易英奕
2023-03-14

假设我有一个应用程序,它定义了几个模型并创建了全局Mongoose连接(Mongoose.connect(...))。该应用程序还依赖于由node_modules目录中的模块定义的一些模型。我遇到的问题是应用程序和单独的模块不共享相同的全局连接对象。

好吧,好吧。与其让模块导出模型,它可以只导出模式,主应用程序可以将其注册到连接中。在应用程序中,会有如下内容:

var SomeSchema = require('somemodule').SomeSchema;
mongoose.model('SomeModel', SomeSchema);
var somePlugin = require('somemodule').somePlugin;
var SomeSchema = new mongoose.Schema();
SomeSchema.plugin(somePlugin);
mongoose.model('SomeModel', SomeSchema);

有其他选择吗?

多谢.

共有1个答案

陈琪
2023-03-14

我解决了这个问题,方法是对模式原型进行黑客攻击,使用正确的Mongoose.schema实例,以便通过内部Mongooseinstanceof检查。对于您的示例,我将添加如下一行:

var SomeSchema = require('somemodule').SomeSchema;
SomeSchema.__proto__ = mongoose.Schema.prototype;
mongoose.model('SomeModel', SomeSchema);

这当然不是犹太教,但它对我有效!

 类似资料:
  • 问题内容: 我想将Mongoose模型分离到一个单独的文件中。我试图这样做: 然后,我尝试使用如下模型: 在单独的模块中引用模型是否合理? 问题答案: 基本方法看起来很合理。 作为一种选择,您可以考虑集成模型和控制器功能的“提供商”模块。这样,您可以让app.js实例化提供程序,然后可以执行所有控制器功能。app.js只需指定要实现的具有相应控制器功能的路由即可。 为了进一步整理,您还可以考虑使用

  • 对于那些比较复杂的样式/颜色转换, 使用不同的npm模块有时会是比自己造轮子更好的选择. Example 对于在CSS中的暗色梯度, 我们可以使用chroma-js这个模块 import chroma from 'chroma-js' const alpha = (color) => (a) => chroma(color).alpha(a).css(); const darken = alpha

  • 所有发布在npm上的模块,都可以在自己的npm主页上看到。 但是如果想要更为直观的管理,可以通过一个名为badgeboard的工具来浏览。 对于npm的模块,已经有很多成熟的服务,方便开发者了解自己的模块状态。 正如上图中所示,常用的服务有: 持续集成:travis 测试覆盖:coveralls 查看模块依赖:david-dm 这些工具都可以非常好的帮助你管理自己的npm模块、了解模块的状态。 例

  • 我有以下代码: 我编译此文件时出错: 但是,删除内部模块并编译它本身包含的代码运行良好: 我错过了什么?如果模块位于单独的文件中,我会收到相同的错误: main.rs a.rs

  • 问题内容: 我正在尝试打字稿。在hello世界阶段它工作正常。我现在正在尝试使用npm模块: = 这不起作用: -> -> 看着打字稿文档和谷歌没有帮助。其他S /O问题未得到回答 元素: 打字稿1.8最新 是的,lodash已安装并存在于我的文件系统中(已选中) 我也做了 变种或不起作用 我试图调整tsconfig.json选择在其他的答案建议 ,并在一些答案建议,仍然无法正常工作 我们如何在打

  • 问题内容: 我有一个提供这样的JDBI 实例: 在另一个模块中,我想在该DBI实例上调用一些初始化方法(配置对特定数据类型的支持)。放入JDBI模块本身是不合适的逻辑,因为它是特定于应用程序的,而不是使用JDBI的任何应用程序所通用的。我是否可以进行这种“额外”配置? 我尝试使用该方法,但似乎没有为以这种方式提供的对象调用该方法。 问题答案: 该吉斯注射文档描述了如何通过注释与@注入的方法来调用一