繁体   English   中英

带有 Express 的 Node.JS:错误:监听 EADDRINUSE:地址已在使用中

[英]Node.JS with Express: Error : listen EADDRINUSE: address already in use

我目前正在尝试使用 Node.js 和 Express 构建一个简单的 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启动服务器。

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

EADDRINUSE 表示listen() 尝试绑定服务器的端口号已被使用。

因此,在您的情况下,必须已经在端口 3111 上运行服务器。 搜索进程ID:

 sudo lsof -i:3111

这将列出在此端口上侦听的所有 PID,一旦您拥有 PID,您可以使用以下命令终止它:

 kill -9 {PID}

重新启动您的服务器。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM