【发布时间】:2013-01-09 17:06:45
【问题描述】:
假设我有一个应用程序,它定义了几个模型并创建了全局 Mongoose 连接 (mongoose.connect(...))。该应用程序还依赖于node_modules 目录中的模块定义的一些模型。我遇到的问题是应用程序和单独的模块不共享同一个全局连接对象。
好的,好的。与其让模块导出模型,不如只导出模式,主应用程序可以将其注册到连接中。在应用程序中会有类似的内容:
var SomeSchema = require('somemodule').SomeSchema;
mongoose.model('SomeModel', SomeSchema);
不幸的是,这也不起作用。注册模型时,Mongoose 会检查给定模式是否是 mongoose.Schema (here) 的实例。当SomeSchema 被定义(在单独的模块中)时,它使用new mongoose.Schema({ ... }) 创建模式,其中模块的本地依赖树需要mongoose。当应用程序注册模式时,它使用应用程序依赖项所需的mongoose。由于 mongoose 的两个副本不是同一个对象,因此给定架构不是 mongoose.Schema 的实例,因此会引发错误。
你有什么建议吗?我在想一个潜在的解决方案是让模块创建一个接受模式并添加所有路径、方法等的“插件”函数。主应用程序将创建一个空模式并添加插件。比如:
var somePlugin = require('somemodule').somePlugin;
var SomeSchema = new mongoose.Schema();
SomeSchema.plugin(somePlugin);
mongoose.model('SomeModel', SomeSchema);
还有其他选择吗?
非常感谢。
【问题讨论】:
-
你真正想要什么。?您只需将所有架构放在项目组织的不同文件中..?
-
我想跨多个项目/应用重用 NPM 模块提供的模型。