首页 > 解决方案 > 带有 Express 的 Node.JS:错误:监听 EADDRINUSE:地址已在使用中

问题描述

我目前正在尝试使用带有 Express 的 Node.js 构建一个简单的 CRUD API。我通常没有问题,但是今天开始出现新的错误消息。

我可以使用一次 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.

我已经尝试使用请求端口获取进程 ID sudo lsof -i tcp:3111,以及killall -9 node,但是我没有得到任何这些命令,最后一个只返回No matching processes belonging to you were found

标签: javascriptnode.jsexpress

解决方案


你好,谢谢你的回答,巴里奥斯。很抱歉这个延迟的回复。

我上周找到了解决方案;对于可能遇到相同问题的人,我将从回答评论开始。首先,我正在使用 MacOS Big Sur 11.2.3。

我尝试了sudo lsof -i :3111之前的发布,但是在这个端口上没有找到服务器,我找不到用kill -9命令终止的 ID。

好吧,通常,原因很简单,我在初始化我的项目时一定搞砸了,npm init -y并且没有创建 node_module 目录,每次我启动我的服务器时,都会创建一个隐藏文件,并以端口号作为其名称和只要它在那里,我就无法使用关联的端口。

很抱歉在这个问题上浪费时间。


推荐阅读