使nodemon在崩溃时自动重启程序,而无需在自定义错误时等待文件更改?

j8ag8udp  于 2023-06-29  发布在  Node.js
关注(0)|答案(3)|浏览(205)

我正在建立一个电子商务网站,那里有一个认证系统。
我注意到,如果客户端使用错误的用户或密码登录,使用nodemon的后端/服务器将崩溃并挂在那里崩溃,直到我手动重新启动nodemon。以下是nodemon崩溃的输出错误示例:
[nodemon]应用程序崩溃-在启动前等待文件更改...
node:internal/errors:464 ErrorCaptureStackTrace(err);
^
错误[ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头
当然,当服务器崩溃时,客户端不能再访问或重新登录,直到服务器重新启动。经过一些谷歌搜索,我发现this questionthis repository,解决了我的问题,但特别是,而不是预期的准确,我不希望nodemon永远重新启动任何错误发生的当然,但只有与具体的错误,我设置他们-如我上面提到的身份验证错误-。
所以,我的想法/问题是:是否有办法让nodemon某些情况下的故障或错误(不是所有)自行重启?

2vuwiymt

2vuwiymt1#

看起来你指的是生产环境,nodemon是a development node server,它不适合在生产环境中使用,正如介绍所述:
nodemon是一个帮助开发基于Node.js的应用程序的工具,当检测到目录中的文件更改时,它会自动重新启动节点应用程序。
你应该在生产环境中使用node.js,而不是nodemon。
要在生产环境中管理节点服务器,可以使用a process manager like PM2.
也就是说,每次用户使用错误密码时都会崩溃的认证服务器在处理常见用例时非常无效。因此,我建议从修复根本原因开始,这是错误的服务器,然后从偶然的崩溃中恢复使用PM2之类的东西。
PS:你得到的错误看起来像一个express错误,当你发送一个响应(在这种情况下是一个错误响应)而不退出函数时,例如。使用return。因为您没有返回,所以调用了另一个res.send,这导致了'ERR_HTTP_HEADERS_SENT'错误。See this answer.

ldioqlga

ldioqlga2#

这真的很糟糕,因为它会让你的程序陷入重新启动的循环,但是如果你真的想要它,用你的文件名替换app.js,并尝试这样做:

nodemon -x 'node app.js || copy /b app.js +,,'

Linux版本:

nodemon -x 'node app.js || touch app.js'

下一次在你问之前试着谷歌一下,因为它很可能更快。

neekobn8

neekobn83#

如果您使用的是linux并且有SystemD,那么您可以创建一个服务来启动nodemon并在.service文件中设置Restart=on-failure。如果希望服务在崩溃后自动重启,请使用nodemon --exitcrash

[Unit]
Description=myService 

[Install]
WantedBy=multi-user.target

[Service]
ExecStart=/usr/local/bin/nodemon /apps/myapp/app.js --watch /apps/myapp/app.js --exitcrash
Type=simple
User=root
Group=root
WorkingDirectory=/apps/
Restart=on-failure

https://wiki.debian.org/systemd/Services

相关问题