我是Node.js的新手,但愿意认真尝试。来自PHP的东西似乎有点令人困惑,因为没有index.php,但需要执行启动脚本来启动服务器npm start
。
这是如何在生产中完成的?有预运行脚本吗?如果服务器由于某种原因关闭怎么办?如何在没有客户端连接问题的情况下自动备份服务器?它是否会自动适用于域名,或者是否也意味着有人必须访问domain.com:3000?
我在想这个错误的方法吗?
答案 0 :(得分:3)
你问的问题是非常广泛的。让我来说明它是如何运作的。
来自PHP的东西看起来有点令人困惑,因为没有 index.php,但需要执行一个启动脚本来激活 服务器npm start。
所以在node.js中我们有一个文件,通过它我们可以启动节点服务器并决定我们想要什么。大多数人使用app.js , server.js , index.js
当您运行npm start
时,这意味着您在文件已写入package.json
的文件夹中有start: node app.js
。当你运行npm start
时,它会起火。
这是如何在生产中完成的?是否有预运行脚本?
NODE_ENV=production npm start
,你可以像这样在节点代码中访问它
process.env.NODE_ENV
。通过这种方式,您可以为每个环境添加dev,qa标记。
我建议你看看
What if the server closes for some reason, how do I get it back up automatically without having connection problems for the clients?
因此,您可以查看https://nodejs.org/api/cluster.html
您可以管理崩溃线程,然后打开另一个线程,因为节点是单线程。
你也可以管理node.js所有类型的错误。这使得node.js捕获所有异常和错误
https://nodejs.org/api/process.html
process.on
是否也意味着有人必须去domain.com:3000?
没有。你可以带任何你想要的端口。无论如何80,8080。我建议在node.js应用程序前面使用nginx。但是为了减少兼容性,可以使用简单的节点应用程序。
例如: -
var http = require('http');
var port = 3000 ; // take any 80, 8080
http.createServer(function (request, response) {
response.writeHead(200, {
'Content-Type': 'text/plain',
'Access-Control-Allow-Origin' : '*'
});
response.end('Hello World\n');
}).listen(port);
希望得到这个帮助。
答案 1 :(得分:2)
回答第一个问题,还有其他选项可以运行节点应用程序。我建议你开始使用像Nodemon这样的软件包 实际上是为此目的而建的。
回答第二个问题,如果您愿意,可以使用某些容器系统将其用于生产部署。这里有一些选项docker,kubarnetees等等。
您的自动重启事件可由您用于部署的容器管理器或程序包解决。
要重定向80或443端口上要重定向到应用程序的所有请求,您可以尝试使用nginx。
答案 2 :(得分:1)
如果由于某种原因关闭服务器,有些模块可用于自动重启服务器。其中一些是pm2,永远。
答案 3 :(得分:1)
如果不详细说明,您必须非常清楚以下内容:
您的节点网络流程将会消失。是的,没错,当有未被捕获的异常时,它可能会死亡。因此,您需要多个进程进行故障转移,因此有许多技术和库。其中一些是:
或者(在我看来,这不适合生产)一些进程监视器,如果它死了将重启你的节点web进程: https://github.com/foreverjs/forever