Ris*_*dey 18 javascript node.js express nodemon
我正在创建一个项目并使用 nodejs,为后端表达。一切正常,但是当我对文件进行任何更改时,由于以下错误,nodemon 无法重新启动服务器:
Error: listen EADDRINUSE: address already in use :::5000
索引.js:
const express = require("express");
const morgan = require("morgan");
const mongoose = require("mongoose");
const cookieParser = require("cookie-parser");
const session = require("express-session");
const FileStore = require("session-file-store")(session);
const dotenv = require("dotenv");
var passport = require("passport");
dotenv.config();
const PORT = process.env.PORT || 5000;
const app = express();
.....
app.listen(PORT, () => console.log(`Server listening on port ${PORT}!`));
Run Code Online (Sandbox Code Playgroud)
包.json
const express = require("express");
const morgan = require("morgan");
const mongoose = require("mongoose");
const cookieParser = require("cookie-parser");
const session = require("express-session");
const FileStore = require("session-file-store")(session);
const dotenv = require("dotenv");
var passport = require("passport");
dotenv.config();
const PORT = process.env.PORT || 5000;
const app = express();
.....
app.listen(PORT, () => console.log(`Server listening on port ${PORT}!`));
Run Code Online (Sandbox Code Playgroud)
我每次都必须从终端明确杀死服务器,这不是最佳解决方案。我尝试了几件事,但都没有奏效。甚至在 nodemon GitHub 问题页面中发现了一些问题,但我也找不到任何东西。
我还添加了lsof -i:5000的输出,即使服务器我正在关闭服务器 - * node 31625 rishav 20u IPv6 5300049 0t0 TCP :5000 (LISTEN)
Jey*_*yov 19
--delay 帮助我解决了这两个问题
在自动重启
止于 ctrl-c
nodemon --delay 500ms app.js
Run Code Online (Sandbox Code Playgroud)
我还补充道:
process.once('SIGUSR2', function () {
process.kill(process.pid, 'SIGUSR2');
});
process.on('SIGINT', function () {
// this is only called on ctrl+c, not restart
process.kill(process.pid, 'SIGINT');
});
Run Code Online (Sandbox Code Playgroud)
小智 16
我有同样的情况。如果您使用的是 Visual Studio Code,请检查您的终端。您可能有其他已经在运行您的节点服务器的终端实例。
我遇到了同样的问题,每次保存文件时都会发生错误。
** 更新于 2021 年 3 月 18 日 **
** 结尾 **
我需要退出nodemon模式,找出PID,然后杀死它。这不是一个好的解决方案,因为它很麻烦并且阻止我在终端中获取调试日志。
但我找到了另一种方法来解决问题,只需将文件名更改为server.js另一个名称(例如,我尝试过server1.js),同时更改package.json文件中的脚本。(“server”:) npx nodemon server1.js,最后运行npm run server。
这是我所做的:
server.js为server1.js.package.json从更改"server": "npx nodemon server.js"为"server": "npx nodemon server1.js".$ npm run server。我知道这是一个奇怪的解决方案,也许我的计算机或 nodemon 包出了问题,但最终,它确实对我有用,文件名确实很重要。
这是我在 2020 年 11 月 1 日发现的一个有趣的观察结果:
server.js并且server1.js它们具有相同的端口号 (8000),则当 时npm run server,会发生错误。server.js默认会自动运行。即使我只"server": "npx nodemon server1.js"在 package.json 中,当我的终端执行npm run server命令时,nodemonserver.js也会server1.js同时运行。server.js和server1.js具有相同的端口号,这使得错误发生。server.jsnodemonserver.js自动运行,然后server.js按照package.json脚本运行,就会出现错误。希望这会有所帮助。请随时告诉我这是否适用于您的应用程序。
小智 8
我认为当我在没有事先关闭 nodemon 的情况下关闭服务器的终端时会发生这个错误。
然后,通常第二天,nodemon 开始表现得很奇怪。
我 是如何解决的:我注意到在运行ps -fp $(grep -u my_username) 时,我启动并运行了几个 nodemon 实例。所以我做了pkill -f nodemon,它杀死了所有的 nodemon 实例,然后重新启动了 nodemon 并且在我的 Linux 服务器的美妙领域中一切都恢复了。
所有答案都建议出于某种原因与 nodemon 修复分开。为了正确重新启动服务器,您需要使用正确的信号将其关闭(终止)。您可以使用标志指定信号--signal。例如:
nodemon --exec go run main.go --signal SIGTERM
Run Code Online (Sandbox Code Playgroud)
在您的特定示例中,这将是:
nodemon --ignore 'sessions/' index.js --signal SIGTERM
Run Code Online (Sandbox Code Playgroud)
更多内容请参见优雅地重新加载脚本。
您可以尝试在其他端口(如 3000)上运行您的服务器。
如果您仍想使用相同的端口,则可以使用以下命令获取该特定端口上正在运行的进程列表:
lsof -i tcp:3000
Run Code Online (Sandbox Code Playgroud)
在终端中使用以下命令来终止正在运行的端口
sudo kill -9 $(lsof -i tcp: 3000 -t)
Run Code Online (Sandbox Code Playgroud)
小智 5
编辑声明应用程序的代码部分,如下所示。
app.listen(PORT, function () {
console.log(`The SERVER HAS STARTED ON PORT: ${PORT}`);
})
// Fix the Error EADDRINUSE
.on("error", function (err) {
process.once("SIGUSR2", function () {
process.kill(process.pid, "SIGUSR2");
});
process.on("SIGINT", function () {
// this is only called on ctrl+c, not restart
process.kill(process.pid, "SIGINT");
});
});
Run Code Online (Sandbox Code Playgroud)
轻松的皮兹。这对我有用。感谢:https://www.youtube.com/watch?v =YwP3KJ0lH_k
| 归档时间: |
|
| 查看次数: |
23852 次 |
| 最近记录: |