gpt4 book ai didi

javascript - 从多个模块初始化 Node.js 数据库

转载 作者:行者123 更新时间:2023-12-03 08:50:35 25 4
gpt4 key购买 nike

我的项目中有3个模块:A、B、C;它们都使用 Rethinkdb,这需要在初始化时进行异步 r.connect 调用。

我正在尝试从命令行从模块 A 调用模块 B;然而,尽管在 require() 上启动了 r.connect,B 仍无法提供此服务,因为在模块 A 调用时 rethinkdb 尚未加载。

可以通过什么方式重构此代码,以便我实际上可以确保在调用 B 之前所有初始化都已完成?

我尝试使用闭包在模块之间传递状态;但是,由于 r.connect 仅可用作异步函数,因此将采用以下形式:

r.connect( config.rethinkdb, function(err, connection)  {
rconn = connection;
// all module requires
require("./moduleB")(rconn);
require("./moduleC")(rconn);

...lotsacode...
});

感觉很不对劲。还有更好的建议吗?

最佳答案

您可以使用 Promise 并传递连接。像这样的事情

r.connect(config.rethinkdb)
.then(function(connection) {
//do some stuff here if you want
initWholeApp(connection)
})

initWholeApp 连接内,您可以放置​​您的应用程序代码。

您甚至可以将其简化为

r.connect(config.rethinkdb)
.then(initWholeApp)

With initWholeApp 是一个接受参数作为建立连接的函数。

不仅如此,您甚至可以在完成该查询后在连接上运行每个查询(只需确保关闭连接),或者使用带有支持它的驱动程序的 RethinkDB 连接池,例如 https://github.com/neumino/rethinkdbdash或者自己动手。

关于javascript - 从多个模块初始化 Node.js 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32693663/

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