Nodejs module.parent 条件无法在 ubuntu 服务器上运行
Nodejs module.parent condition not working on ubuntu server
我正在处理一个现有的项目,并在我的 app.js
中找到了这段代码
//if (!module.parent) {
// Server listen
app.listen(mysettings.port, function () {
console.log(`Server ready at ${ENV}:${mysettings.port}`);
});
//}
当我在本地 运行 时,app.listen 命中并且我的项目 运行s,当我将我的项目上传到 ubuntu 服务器时,该项目没有 运行,但超时。当我注释掉 ubuntu 项目的条件时 运行s 完美。我知道在我的本地主机上,module.parent 为空。
如有任何帮助,我们将不胜感激。
这可能适合你:
if ((!module.parent) || (("exports" in module.parent) && ("PhusionPassenger" in module.parent.exports))) {
// Server listen
app.listen(mysettings.port, function () {
console.log(`Server ready at ${ENV}:${mysettings.port}`);
});
}
module.parent
是 null
当您的 app.js
直接从节点调用时就像 node app.js
.
我相信 Plesk 在后台使用 PhusionPassenger(至少 Plesk 官方 node.js 扩展可能是您的情况)。在这种情况下,您的应用程序可能是使用命令 passenger start --app-type node --startup-file app.js
调用的,该命令会在您之前预加载脚本 node-loader.js
,这将成为您的 module.parent
.
如果您希望直接节点和 Passenger 的调用具有相同的行为,则必须将代码中的每个 (!module.parent)
过滤器替换为 (!module.parent) || (("exports" in module.parent) && ("PhusionPassenger" in module.parent.exports))
。通过这样做,您将不断避免原始开发人员可能打算避免的情况。
“times out”一般是指无法绑定端口。
您可能必须修复环境,才能访问所需的 ENV
值。
尝试全局设置环境(在获取之前需要重新启动):
sudo nano /etc/environment
还要确保 mysettings.port
甚至可以访问/不被其他东西使用。
这 似乎相关,因此甚至可能有两种定义环境的方法。
(我的答案是 Linux 版本 - 链接的答案似乎是 Plesk 版本)。从文件加载时,仍然有可能一个具有合适的值 - 而另一个没有。
module.parent 是一个特殊的 属性 ,当你 require() 一个模块时由 Node 设置。它是对需要此模块的模块的引用。
如果你是 top-level 模块,那就是 null
。如果您是 child 模块,那就是 parent 模块。如果你是大爷child,那就是大爷parent。等等。
// $ node app.js
console.log(module.parent); // `null`
// require('./app')
console.log(module.parent); // `{ ... }`
我正在处理一个现有的项目,并在我的 app.js
中找到了这段代码//if (!module.parent) {
// Server listen
app.listen(mysettings.port, function () {
console.log(`Server ready at ${ENV}:${mysettings.port}`);
});
//}
当我在本地 运行 时,app.listen 命中并且我的项目 运行s,当我将我的项目上传到 ubuntu 服务器时,该项目没有 运行,但超时。当我注释掉 ubuntu 项目的条件时 运行s 完美。我知道在我的本地主机上,module.parent 为空。
如有任何帮助,我们将不胜感激。
这可能适合你:
if ((!module.parent) || (("exports" in module.parent) && ("PhusionPassenger" in module.parent.exports))) {
// Server listen
app.listen(mysettings.port, function () {
console.log(`Server ready at ${ENV}:${mysettings.port}`);
});
}
module.parent
是 null
当您的 app.js
直接从节点调用时就像 node app.js
.
我相信 Plesk 在后台使用 PhusionPassenger(至少 Plesk 官方 node.js 扩展可能是您的情况)。在这种情况下,您的应用程序可能是使用命令 passenger start --app-type node --startup-file app.js
调用的,该命令会在您之前预加载脚本 node-loader.js
,这将成为您的 module.parent
.
如果您希望直接节点和 Passenger 的调用具有相同的行为,则必须将代码中的每个 (!module.parent)
过滤器替换为 (!module.parent) || (("exports" in module.parent) && ("PhusionPassenger" in module.parent.exports))
。通过这样做,您将不断避免原始开发人员可能打算避免的情况。
“times out”一般是指无法绑定端口。
您可能必须修复环境,才能访问所需的 ENV
值。
尝试全局设置环境(在获取之前需要重新启动):
sudo nano /etc/environment
还要确保 mysettings.port
甚至可以访问/不被其他东西使用。
这
(我的答案是 Linux 版本 - 链接的答案似乎是 Plesk 版本)。从文件加载时,仍然有可能一个具有合适的值 - 而另一个没有。
module.parent 是一个特殊的 属性 ,当你 require() 一个模块时由 Node 设置。它是对需要此模块的模块的引用。
如果你是 top-level 模块,那就是 null
。如果您是 child 模块,那就是 parent 模块。如果你是大爷child,那就是大爷parent。等等。
// $ node app.js
console.log(module.parent); // `null`
// require('./app')
console.log(module.parent); // `{ ... }`