gpt4 book ai didi

node.js - 在模块中注入(inject)唯一的 Mongoose 实例

转载 作者:太空宇宙 更新时间:2023-11-03 23:39:00 24 4
gpt4 key购买 nike

我的模块注入(inject)了一个 Mongoose 实例,但现在它们都使用在最后一个 Mongoose 上设置的数据库。

例如,我的主模块创建了很多模块,然后对它们调用 init。

var mongoose = require('mongoose');
//...
mongoose.connect(connString);//specific to finance
var finance = require('finance').init({db:mongoose});

在我注入(inject) mongoose 实例之前,财务模块本身需要 mongoose,并且由于它位于 node_modules 中,因此它获得自己的 mongoose。现在;无论我创建多少个主模块以及调用 require 多少次,它总是会获得第一次获得的实例。

因此,创建的所有模块都将连接到上次连接设置的任何内容。

可以使用createConnection,但仍然不确定如何注入(inject) Mongoose ,我尝试过:

var mongoose = require('mongoose');
//...
var c = mongoose.createConnection(connString);//specific to finance
mongoose.connection=c;
var finance = require('finance').init({db:mongoose});

现在我收到一个错误,例如编译后无法覆盖finance模型。

不知何故,很难在同一模块中获得另一个 Mongoose 实例。这很有趣,因为根据 mongoose 的说法,您应该能够对不同的模型使用不同的连接,但由于您需要一个 mongoose 实例来定义模型,那么如何注入(inject)它呢? Require 一遍又一遍地返回相同的实例。

尝试了以下方法,但均无效。

console.log('deleting mongoose cache:',require.cache.mongoose=undefined);
//or this one
console.log('deleting mongoose cache:',delete require.cache.mongoose);

所以问题是:如何在具有需要唯一数据库的模型的模块中注入(inject) Mongoose ?如果 main 设置 mongoose 实例和连接以注入(inject)到模型中,那么如何防止它一遍又一遍地创建相同的实例?

如果可以使用 createConnection 创建唯一的连接,那么我应该向模块中注入(inject)什么?通过此连接,我无法创建模型,需要一个 Mongoose 实例。如果每个模型都需要调用 require 来获取它,那么 mongoose 是不可注入(inject)的。

最佳答案

所以 mongoose 使用单例模式。当您执行 require("mongoose") 时,您每次都会获得相同的构造函数实例,如 mongoose/lib/index.js 底部所示 ( source code link here ) 。 var mongoose = module.exports=exports = new Mongoose;

要获取唯一实例,请使用此模式:

var singleton = require("mongoose")
var unique = new singleton.constructor();
//now use "unique" just as you would "mongoose"

关于node.js - 在模块中注入(inject)唯一的 Mongoose 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27296288/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com