如何在驻留的npm模块中使用Mongoose已经打开的连接?/node_modules
例如:
应用
共同
db.js
node_modules
a_module
楷模
a_model.js
index.js
app.js
app.js
触发打开通过连接requir
荷兰国际集团common/db.js
和执行connect()
方法.
在后来的app.js
一个电话就是发a_model/index.js
在需要的a_model.js
文件,然后发布了findOne()
,因为它检测到没有连接打开,以便将呼叫排队永远永不执行从未被执行调用.
我已经通过检查日志检查了连接是否已打开,因此问题是其他问题.
值得注意的是,我能够使类似的设置正常工作,但不必a_module
是一个npm
模块,它是app
文件夹下面的常规目录.
解
最后,我在下面很棒的家伙的帮助下正常工作.
通过使用global
nodejs对象,我能够暴露数据库连接,而不会使代码混乱:
db.js:
global.db = mongoose;
a_model.js:
mongoose = global.db;
瞧!
参考:http://productbuilder.wordpress.com/2013/09/06/using-a-single-global-db-connection-in-node-js/
节点缓存调用,require
以便您不必在每个模块上重新启动模块require
.
http://nodejs.org/docs/latest/api/modules.html#modules_caching
但是,不保证子依赖项使用相同的对象:
http://nodejs.org/docs/latest/api/modules.html#modules_module_caching_caveats
mongoose
连接依赖于此缓存机制来保持与MongoDB的开放连接.所以在你的情况下,当你a_module
进入它自己的模块时,你实际上是实例化两个mognoose
对象,只有你的第一个mongoose
对象是打开一个连接.第二个对象永远不会打开连接.
你可以通过让每个模块建立自己的连接来解决这个问题,或者你必须回到a_module
不是一个独立的包.