Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 错误:侦听EADDRINUSE:地址已在使用中:::3001[Nodemon,Node.js]_Javascript_Node.js_Nodemon - Fatal编程技术网

Javascript 错误:侦听EADDRINUSE:地址已在使用中:::3001[Nodemon,Node.js]

Javascript 错误:侦听EADDRINUSE:地址已在使用中:::3001[Nodemon,Node.js],javascript,node.js,nodemon,Javascript,Node.js,Nodemon,我已经使用Windows10笔记本电脑很多年了,现在我换成了MacBook。我从Github中提取了一些代码(对我的服务器使用完全相同的代码),当我点击save时,Nodemon不想自动重启服务器。发生什么事了 index.js: const express = require("express"); const path = require("path"); const cors = require("cors"); const bo

我已经使用Windows10笔记本电脑很多年了,现在我换成了MacBook。我从Github中提取了一些代码(对我的服务器使用完全相同的代码),当我点击save时,Nodemon不想自动重启服务器。发生什么事了

index.js:

const express = require("express");
const path = require("path");
const cors = require("cors");
const bodyParser = require("body-parser");
const http = require("http");

const app = express();
const server = http.createServer(app);

app.use(express.json({ extended: false, limit: "5mb" }));
app.use(cors());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

if (process.env.NODE_ENV === "production") {
    app.use(express.static("client/build"));
    app.get("*", (req, res) =>
        res.sendFile(path.resolve(__dirname, "client", "build", "index.html"))
    );
}

const PORT = process.env.PORT || 3001;

server.listen(PORT, () => console.log(`Server started on port ${PORT}.`));
我进行了一些更改,然后单击“保存”,然后出现以下错误:

events.js:292
[0]       throw er; // Unhandled 'error' event
[0]       ^
[0] 
[0] Error: listen EADDRINUSE: address already in use :::3001
Package.json:

"scripts": {
        "start": "node index.js",
        "server": "nodemon index.js",
        "client": "npm start --prefix client",
        "dev": "concurrently \"npm run server\" \"npm run client\""
},

我想要的是,当我点击save时,它会保存所有内容,然后在同一端口上重新启动服务器。一切都是自动的。我不想在每次保存时手动终止服务器。这一个在Windows 10上运行,现在在我的MacBook上没有了…

当Nodemon检测到任何监控文件中的更改时,它将向加载的应用程序发送一个信号,然后在内存中重新启动(“重新加载”)该应用程序的一个新实例。如果不处理该SIGUSR2信号,则应用程序的旧副本仍将处于活动状态,侦听端口3001(或其他)上的传入请求

因此,新实例正在启动。它将监听同一个编程端口,即3001。但由于旧副本尚未失效(仍在运行),因此仍将使用该端口,这将导致:

错误:侦听EADDRINUSE:地址已在使用中

简而言之,这就是问题的原因

解决方案是监听SIGUSR2信号,并在事件发生时以编程方式优雅地关闭应用程序。在代码中的某个位置添加以下行,越早越好:

process.once("SIGUSR2", () => server.close(err => process.kill(process.pid, "SIGUSR2")));
现在,应用程序将在看到该信号时自行终止。上面的代码可能无法100%工作,但按照这种模式,您可以监听许多其他POSIX信号并相应地处理它们,例如SIGINT、SIGABRT、SIGHUP、SIGTERM等


阅读更多关于Nodemon的信息,并在上优雅地重新加载脚本。

有时它可以完成任务,有时不行,我安装了Nodemon Globally,退出时,然后它给了我nodemon 130错误代码,你能给我们看一下
客户机
目录中package.json的内容吗?还有你使用的是什么节点和npm版本?我想这可以解决你的问题