Node.js 在后台创建节点服务器的优势

Node.js 在后台创建节点服务器的优势,node.js,express,Node.js,Express,直到今天,在我所有的node\express项目中,我已经在一些文件中创建了HTTP服务器 var server = http.createServer(app); http.globalAgent.maxSockets = maxSockets; server.listen(port, function() { logger.info('App starting on : ' + port ); }); 并直接调用该文件来启动应用程序。最近,我注意到

直到今天,在我所有的node\express项目中,我已经在一些文件中创建了HTTP服务器

var server = http.createServer(app);

    http.globalAgent.maxSockets = maxSockets;
    server.listen(port, function() {
        logger.info('App starting on : ' + port );
    });
并直接调用该文件来启动应用程序。最近,我注意到一些样板,使用调用启动程序文件的方法,并基于参数生成子进程,无论是构建应用程序还是启动应用程序

in package json
"start": "babel-node tools/run.js"


in run .js
// Launch `node build/server.js` on a background thread
function spawnServer() {
  return cp.spawn(
    'node',
    [
      // Pre-load application dependencies to improve "hot reload" restart time
      ...Object.keys(pkg.dependencies).reduce(
        (requires, val) => requires.concat(['--require', val]),
        [],
      ),
      // If the parent Node.js process is running in debug (inspect) mode,
      // launch a debugger for Express.js app on the next port
      ...process.execArgv.map(arg => {
        if (arg.startsWith('--inspect')) {
          const match = arg.match(/^--inspect=(\S+:|)(\d+)$/);
          if (match) debugPort = Number(match[2]) + 1;
          return `--inspect=${match ? match[1] : '0.0.0.0:'}${debugPort}`;
        }
        return arg;
      }),
      '--no-lazy',
      // Enable "hot reload", it only works when debugger is off
      ...(isDebug
        ? ['./server.js']
        : [
            '--eval',
            'process.stdin.on("data", data => { if (data.toString() === "load") require("./server.js"); });',
          ]),
    ],
    { cwd: './build', stdio: ['pipe', 'inherit', 'inherit'], timeout: 3000 },
  );
}
例如:


这有什么好处?

以我的经验,这不是一种普遍的做法。根据注释显示,他们这样做是为了能够根据环境等在命令行选项上进行配置。老实说,这对我来说似乎有点适得其反

我经常看到的是从命令行用
npmstart
启动节点
package.json
有几个选项来定义它将做什么,但大多数情况下,我只是让它调用一些简单的东西,比如
node server.js
或类似的东西。如果要提供多个启动选项(例如,打开调试标志等),则只需添加更多脚本并调用
npm run
即可


任何其他特殊的调味品都会被烘焙到所选的流程管理器中(systemd是我的首选,但其他类似pm2的东西存在并且工作得很好),在这和环境变量之间,您可以完成上述脚本中的全部或大部分内容,而无需所有间接操作。我觉得如果我开始维护应用程序,却不知道它在幕后为我做着类似的事情,那么你发布的示例将真正提高“wtf系数”

很难确切地理解你在问什么。也许你可以展示一种启动服务器的具体方式并询问一下?你发布的链接是一个大项目,这与这个问题有什么关系并不明显。我有一个node.js服务器运行在raspberry Pi上,我用
forever
启动它,因为如果它崩溃,
forever
将自动重新启动它,并为我捕获和协调日志。我添加了代码片段。