我目前正在尝试使用Node.js和Express一起构建一个简单的CRUD。我通常没有麻烦,但今天,一条新的错误信息开始出现。
我可以使用TCP端口一次。如果服务器停止并重新启动,它将给出以下错误:
错误:听EADDRINUSE:地址已经在使用3111;
我可以更改端口,但只能使用新端口一次。给我的代码如下:
// Load packages
const express = require("express");
const formidable = require("express-formidable");
const mongoose = require("mongoose");
const cors = require("cors");
// Initialize serve;
require("dotenv").config();
const mongoURL = process.env.DATABASE_URI;
const app = express();
app.use(formidable());
app.use(cors());
// Connect to the database
mongoose.connect(`${mongoURL}/Some_database`, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
// Get all non-existent routes
app.all("*", (req, res) => {
res.status(404).json({ message: "Ressource not found" });
});
// Launch server
app.listen(process.env.PORT, () => {
console.log("Server launched");
});
我使用npx nodemon index.js
启动服务器。
我已经尝试使用使用sudo lsof -i tcp:3111
的询问端口以及killall -9 node
获取进程ID,但是使用这些命令没有得到任何信息,最后一个只返回No matching processes belonging to you were found
。
发布于 2021-05-14 21:52:45
EADDRINUSE意味着侦听()尝试将服务器绑定到的端口号已经在使用中。
因此,在您的示例中,必须已经在端口3111上运行了服务器。搜索进程id:
sudo lsof -i :3111
这将列出在此端口上侦听的所有PID,一旦有了PID,就可以使用以下方法终止它:
kill -9 {PID}
重新启动服务器。
发布于 2021-05-17 11:22:09
你好谢谢你的回答巴里奥斯。抱歉,我的反应太迟了。
我上周找到了解决方案;对于那些可能陷入同样问题的人,我将从回答评论开始。首先,我与MacOS Big 11.2.3合作。
我在投递之前尝试过sudo lsof -i :3111
,但是在这个端口上没有找到服务器,我找不到一个ID来终止kill -9
命令。
通常情况下,原因很简单,我一定是在用npm init -y
初始化我的projet时搞砸了,而且没有创建node_module汇辑,每次我启动服务器时,都会创建一个隐藏文件,其中的端口号是它的名称,只要它在那里,我就不能使用相关的端口。
很抱歉在这个问题上浪费时间。
https://stackoverflow.com/questions/67450311
复制相似问题