【问题标题】:After Express App is initialized, I can't add objects to module.exports初始化 Express App 后,我无法向 module.exports 添加对象
【发布时间】:2017-07-31 10:11:10
【问题描述】:

server.js

module.exports.a = 'abc';
var app = expressAppConstructor(db);
module.exports.b = 'xyz';
console.log(JSON.stringify(module.exports)); // --> {"a":"abc","b":"xyz"}

exportsLog.js

var io = require('./server');
console.log(JSON.stringify(io)); // --> {"a":"abc"} Note b: xyz is missing

快车应用初始化后如何将b添加到module.exports

我在mean.js堆栈上,上面提到的文件是server.jsexpressConstructorFunctionrequire(./config/express.js)

查看server.jsconfig/express.js的原创内容

【问题讨论】:

  • 您是否遇到了错误?如果第二次调用被忽略,我怀疑expressAppContstructor 一定会抛出错误。 console.log 会在应用初始化后运行吗?
  • 我没有收到任何错误。
  • 使用exports而不是module.exports时没有任何变化
  • 这就是我链接file的原因;-)
  • 我删除了那行。这是我的current version

标签: node.js express meanjs


【解决方案1】:

在使用您的实际应用程序进行调试后,我发现了第二个设置不起作用的原因。它确实有效,但是当您初始化您的快速应用程序时,您需要在您的一条路线中使用服务器文件。

node server.js -> exports.a = 'abc'; -> expressAppConstructor ->

config.getGlobbedFiles('./app/routes/**/*.js').forEach(function(routePath) {
  require(path.resolve(routePath))(app);
});

-> 在通过上面加载的一个路由文件中,运行:require('server.js'); -> 现在堆栈最终返回到服务器文件并执行:exports.b='xyz';,但是您的路由已经需要并缓存了该模块文件。

我实际上会担心您每次需要文件时都会一遍又一遍地启动服务器。虽然我认为它不会中断,因为节点缓存了所需的模块,因此逻辑没有运行,但是缓存服务器模块上的 exports 只有第一个分配,因为它是您的路由文件在第二次分配之前需要的exports 甚至会发生。当您的路由文件尝试加载服务器文件时,它只运行到应用程序初始化行。在您的路由文件中需要它之后添加到 exports 的任何内容显然不会将其添加到导出的数据中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-10
    • 2015-06-18
    • 1970-01-01
    • 2018-02-17
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多