Node.js 在后台创建节点服务器的优势
直到今天,在我所有的node\express项目中,我已经在一些文件中创建了HTTP服务器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 ); }); 并直接调用该文件来启动应用程序。最近,我注意到
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
将自动重新启动它,并为我捕获和协调日志。我添加了代码片段。