如何解决Express 服务器不退出进程并重新释放端口
我在节点应用程序中有一个快速服务器。我需要能够使用调试器运行这个节点应用程序。我还需要能够轻松停止和重新启动服务器,而无需绑定它运行的端口。我需要进入关机状态进行一些清理,我喜欢这样:
const server = app.listen(port,() => {
console.log("Listening on port whatever");
});
process.on('SIGINT',function () {
server.close(() => {
console.log(chalk.blue('Shutting down server'));
// some cleanup code
process.exit();
});
});
我的启动脚本使用 nodemon 在保存时重新启动。以下是我的 package.json 中与此相关的相关部分:
{
"scripts": {
"start:debug": "node --inspect -r tsconfig-paths/register -r ts-node/register ./src/server.ts","start": "nodemon",},"nodemonConfig": {
"ignore": [...],"watch": ["src"],"exec": "npm run start:debug","ext": "ts"
},"configurations": [
{
"type": "node","request": "attach","name": "Node: nodemon","processId": "${command:PickProcess}","restart": true,"protocol": "inspector"
}
]
}
这似乎有效。它正常启动,可通过节点调试器访问,并在使用 nodemon 保存时重新启动。当我点击 ctrl + c
时,服务器关闭并记录 "Shutting down server"
。但是,即使在记录该 get 之后,节点也会记录 Waiting for the debugger to disconnect...
。当我再次点击 ctrl + c
并重新运行 npm start
时,我收到了一个显示 Error: listen EADDRINUSE: address already in use :::PORT#
的崩溃。
这里出了什么问题?我的服务器似乎正常关闭,但调试器似乎没有成功关闭,并且有一个节点进程仍在占用该端口。干净地启动和停止我的服务器以及调试问题变得越来越困难。
解决方法
要使调试器断开连接,您需要关闭包含调试器连接的 Chrome 标签页。这将允许您应用的前一个实例完全退出。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。