微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Express 服务器不退出进程并重新释放端口

如何解决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 举报,一经查实,本站将立刻删除。