Javascript Express server未退出进程并重新释放端口
我在节点应用程序中有一个express服务器。我需要能够使用调试器运行此节点应用程序。我还需要能够停止和重新启动服务器轻松无需绑定它运行的端口。我需要点击关机按钮进行清理,我喜欢这样做:Javascript Express server未退出进程并重新释放端口,javascript,node.js,express,process,nodemon,Javascript,Node.js,Express,Process,Nodemon,我在节点应用程序中有一个express服务器。我需要能够使用调试器运行此节点应用程序。我还需要能够停止和重新启动服务器轻松无需绑定它运行的端口。我需要点击关机按钮进行清理,我喜欢这样做: const server=app.listen(端口,()=>{ log(“在端口上侦听任何内容”); }); process.on('SIGINT',function(){ 服务器关闭(()=>{ log(chalk.blue(“关闭服务器”); //一些清理代码 process.exit(); }); })
const server=app.listen(端口,()=>{
log(“在端口上侦听任何内容”);
});
process.on('SIGINT',function(){
服务器关闭(()=>{
log(chalk.blue(“关闭服务器”);
//一些清理代码
process.exit();
});
});
我的启动脚本使用nodemon在保存时重新启动。以下是my package.json中与此相关的部分:
{
“脚本”:{
“开始:调试”:“节点--inspect-r tsconfig path/register-r ts节点/register./src/server.ts”,
“开始”:“nodemon”,
},
“节点示意图”:{
“忽略”:[…],
“手表”:[“src”],
“exec”:“npm运行开始:调试”,
“分机”:“ts”
},
“配置”:[
{
“类型”:“节点”,
“请求”:“附上”,
“名称”:“节点:Nodemon”,
“processId”:“${command:PickProcess}”,
“重启”:正确,
“协议”:“检查员”
}
]
}
这似乎奏效了。它正确启动,可通过节点调试器访问,并在保存时使用nodemon重新启动。当我点击ctrl+c
时,服务器关闭并记录“关闭服务器”
。但是,即使在记录该get之后,节点也会记录等待调试器断开连接…
。当我再次点击ctrl+c
并重新运行npm start
时,我收到一个崩溃消息说错误:侦听EADDRINUSE:地址已在使用中:::端口
这里怎么了?我的服务器似乎正在正常关闭,但调试器似乎没有成功关闭,而且还有一个节点进程占用该端口。很难干净地启动和停止我的服务器以及调试问题。要断开调试器的连接,需要关闭包含调试器连接的Chrome选项卡。这将允许应用程序的上一个实例完全退出。您是否已停止或分离调试客户端?听起来可能它仍在处理一些事情,因此调试服务器还没有关闭?我不知道如何手动或编程关闭。有什么想法吗?你用什么做调试器?我用的是chrome的node debugger然后,关闭运行调试器的选项卡。这将断开调试器的连接。