设置DB数据后,在nodejs中加载模块



我的最终目标是让module.exports包含一些在应用程序初始化期间加载的DB值

我试过以下

module.exports = (async function() {
const cities = await internalUsage.aggregate(citiesPipeline);
console.log("HandleCities - Cities loaded")
return cities[0].cities;
})();

但这给了我一个承诺

你知道怎么做吗?

**更新**

目前我正在使用全局,如果有人有解决方案可以将其保留在模块中,我很乐意听到

遗憾的是,仅使用module.exports是不可能做到这一点的。由于函数是async,所以当使用香草NodeJSmodule.exports时,你能得到的最好的东西是Promise

如果你能为它await,这也没那么糟糕。module.exports就像一个工厂,无论你require多少次,都只会生成一个Promise。

const citiesPromise = require('./XXXXX_XXXXX');
(async function(){
const cities = await citiesPromise();
...
});

另一种解决方案是使用支持asynchronous factoryDependency Injection(DI(来抽象NodeJS模块。这将允许您导出Promise并将其值作为注入获取。

并不是所有的NodeJS DI都为async值提供了这种抽象,所以在选择DI-lib时要小心。

您可以检查InversifyJS,尽管它鼓励使用TypeScript,但它有ES6示例https://github.com/inversify/InversifyJS/blob/master/wiki/basic_js_example.md.

最新更新