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.parentnull 当您的 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); // `{ ... }`