Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongoose:使用npm/node_模块中的模块提供的模型或模式_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js Mongoose:使用npm/node_模块中的模块提供的模型或模式

Node.js Mongoose:使用npm/node_模块中的模块提供的模型或模式,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,假设我有一个应用程序,它定义了一些模型并创建了全局Mongoose连接(Mongoose.connect(…))。该应用程序还依赖于由node\u modules目录中的模块定义的一些模型。我遇到的问题是,应用程序和单独的模块不共享同一个全局连接对象 好的,很好。与其让模块导出模型,它只需导出模式,主应用程序就可以将其注册到连接中。在应用程序中,会出现如下内容: var SomeSchema = require('somemodule').SomeSchema; mongoose.model('

假设我有一个应用程序,它定义了一些模型并创建了全局Mongoose连接(
Mongoose.connect(…)
)。该应用程序还依赖于由
node\u 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);
不幸的是,这也不起作用。注册模型时,Mongoose正在检查给定的模式是否是
Mongoose.schema
()的实例。当定义了
SomeSchema
时(在单独的模块中),它使用
new mongoose创建模式。模式({…})
其中
mongoose
是模块本地依赖关系树中所必需的。当应用程序注册模式时,它使用应用程序依赖项所需的
mongoose
。由于mongoose的两个副本不是同一个对象,因此给定的模式不是
mongoose.schema
的实例,并引发错误

你有什么建议吗?我在想一个可能的解决方案是让模块创建一个“插件”函数,该函数接受模式并添加所有路径、方法等。主应用程序将创建一个空模式并添加插件。比如:

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);
还有其他选择吗


非常感谢。

我绕过了这个问题,对模式原型进行了黑客攻击,以使用
mongoose.schema
的正确实例,从而使其通过内部mongoose
instanceof
检查。因此,对于您的示例,我将添加一行,如下所示:

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

这当然不是犹太教,但对我来说很有效

你到底想要什么。?你只需要把你所有的模式放在不同的文件中就可以了。我想在多个项目/应用中重用NPM模块提供的模型。