Express 服务器不退出进程并重新释放端口
Express server not exiting process and re-freeing port
我在节点应用程序中有一个快速服务器。我需要能够使用调试器 运行 这个节点应用程序。我还需要能够轻松地停止和重新启动服务器,而无需绑定 运行 所在的端口。我需要进入关机状态进行一些清理,我是这样做的:
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 选项卡。这将允许您的应用程序的前一个实例完全退出。
我在节点应用程序中有一个快速服务器。我需要能够使用调试器 运行 这个节点应用程序。我还需要能够轻松地停止和重新启动服务器,而无需绑定 运行 所在的端口。我需要进入关机状态进行一些清理,我是这样做的:
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 选项卡。这将允许您的应用程序的前一个实例完全退出。