【发布时间】:2017-10-08 10:41:28
【问题描述】:
我正在开发一个 MEAN 堆栈项目,并尝试将一组变量从一个控制器传递到另一个控制器。我目前的方法是为我的**artworks.js** 控制器文件导出多个对象:
module.exports = {
Router: router,
artists: distinctArtistsArray
}
路由器对象是一个传统的 Express 路由器,但 distinctArtistsArray 是我的 MongoDB 数据库中所有艺术家的字符串数组。我有一个在后台运行的异步函数,它时不时地填充 distinctArtistsArray。然后将该数组传递给其他地方编写的一些其他函数,以便在幕后执行一些 NLP 任务。
我希望另一个控制器也可以访问这些变量,因为我不想通过对艺术家信息进行重复的异步查询来给我的 MongoDB 施加过多的负载。这是我的另一个控制器 (complete.js):
router.get("/", (req, res) => {
var ArtworkSearch = require('../controllers/artworks.js');
console.log(ArtworkSearch.artists)
});
我已将 require('../controllers/artworks/js') 放在回调函数中,因为我想在每次请求到达 /complete 端点时不断重新导入值。
但是,在我的控制台中,我收到了一个空数组 ([]),这是我将 distinctArtistsArray 初始化为的数组。仅供参考,我采用了与此SO post 中关于类似主题的公认答案相同的确切方法。
如何让我的艺术家列表在 complete.js 控制器中可用?
【问题讨论】:
-
如果
distinctArtistsArray最初是空的,那么它是如何获取值的。您无需重新导入即可查看该属性的最新值。请记住,模块已缓存,因此重新导入不会再次运行您的模块。它只是从第一次返回缓存的模块。 -
谢谢。我不知道模块缓存在 Node 中!
标签: javascript node.js mongodb