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



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

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

可以用什么方式重构这段代码,以便我可以确保在调用B之前完成所有初始化?

我试图使用闭包来传递模块周围的状态;但是,由于r.c nect只能作为异步函数使用,所以它的形式为:

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)

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

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

最新更新