Error: listen EADDRINUSE: address already in use :::5000 BUT dotnet server does let me run api in port 5000
Error: listen EADDRINUSE: address already in use :::5000 BUT dotnet server does let me run api in port 5000
我知道这个错误已被问过一百万次,但我认为答案不正确或不是最有效的。
// import all libraries
const express = require('express');
const cors = require('cors');
const mongoose = require('mongoose');
const app = express();
require('dotenv').config();
// setup connections
mongoose.connect(process.env.MONGODB_URL)
.then(() => console.log("Connected to DB "))
.catch(() => console.log("Couldn't connect to db ❌"));
// setup middlewares
app.use(cors()); // CORS => Cross origin resource sharing; // share frontend <-> backend
app.use(express.json());
// setup routes
app.use("/api/auth", require("./routes/user"));
app.use("/api/books", require("./routes/book"));
app.use("/api/rentals", require("./routes/rental"));
// start listening on server
const port = process.env.PORT;
app.listen(port, () => {
console.log("Server running...");
})
有我的代码供参考。如果我在 .env 中将端口从 5000 更改为 5500,一切正常。如果我停用空中播放端口,一切正常。
我的问题是,当我 运行 端口 5000 中的 dotnet api 服务器时没有错误。
为什么我可以 运行 一个 dotnet 服务器在 5000 中没有问题,但在节点中它给我一个错误?
我 运行 lsof -i tcp:5000 同时 运行 我的 dotnet api:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
firefox 938 arturofiliovilla 137u IPv4 0x23e78a2a111d8441 0t0 TCP localhost:59093->localhost:commplex-main (ESTABLISHED)
ControlCe 25701 arturofiliovilla 21u IPv4 0x23e78a2a108e4ed1 0t0 TCP *:commplex-main (LISTEN)
ControlCe 25701 arturofiliovilla 22u IPv6 0x23e78a1babf17ce9 0t0 TCP *:commplex-main (LISTEN)
API 26565 arturofiliovilla 238u IPv4 0x23e78a2a12ba39b1 0t0 TCP localhost:commplex-main (LISTEN)
API 26565 arturofiliovilla 239u IPv6 0x23e78a1babf09189 0t0 TCP localhost:commplex-main (LISTEN)
API 26565 arturofiliovilla 241u IPv4 0x23e78a2a10910ed1 0t0 TCP localhost:commplex-main->localhost:59093 (ESTABLISHED)
也许有掩码?我不确定,但我的 dotnet 服务器没有错误。
知道为什么会这样吗?
- Node.js/Express 默认尝试绑定到
[::]:5000
and/or 0.0.0.0:5000
,当你只指定端口 5000 时。这就是发生冲突的原因。
- ASP.NET 核心,但是,默认情况下绑定到
localhost:5000
。
如果你阅读更多关于计算机网络的知识,你会发现这两种绑定方法之间的差异有多大。
您可以尝试让 Express 绑定到 localhost:5000
,也就是
app.listen(port, "localhost", () => {
console.log("Server running...");
})
参考资料
我知道这个错误已被问过一百万次,但我认为答案不正确或不是最有效的。
// import all libraries
const express = require('express');
const cors = require('cors');
const mongoose = require('mongoose');
const app = express();
require('dotenv').config();
// setup connections
mongoose.connect(process.env.MONGODB_URL)
.then(() => console.log("Connected to DB "))
.catch(() => console.log("Couldn't connect to db ❌"));
// setup middlewares
app.use(cors()); // CORS => Cross origin resource sharing; // share frontend <-> backend
app.use(express.json());
// setup routes
app.use("/api/auth", require("./routes/user"));
app.use("/api/books", require("./routes/book"));
app.use("/api/rentals", require("./routes/rental"));
// start listening on server
const port = process.env.PORT;
app.listen(port, () => {
console.log("Server running...");
})
有我的代码供参考。如果我在 .env 中将端口从 5000 更改为 5500,一切正常。如果我停用空中播放端口,一切正常。
我的问题是,当我 运行 端口 5000 中的 dotnet api 服务器时没有错误。
为什么我可以 运行 一个 dotnet 服务器在 5000 中没有问题,但在节点中它给我一个错误?
我 运行 lsof -i tcp:5000 同时 运行 我的 dotnet api:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
firefox 938 arturofiliovilla 137u IPv4 0x23e78a2a111d8441 0t0 TCP localhost:59093->localhost:commplex-main (ESTABLISHED)
ControlCe 25701 arturofiliovilla 21u IPv4 0x23e78a2a108e4ed1 0t0 TCP *:commplex-main (LISTEN)
ControlCe 25701 arturofiliovilla 22u IPv6 0x23e78a1babf17ce9 0t0 TCP *:commplex-main (LISTEN)
API 26565 arturofiliovilla 238u IPv4 0x23e78a2a12ba39b1 0t0 TCP localhost:commplex-main (LISTEN)
API 26565 arturofiliovilla 239u IPv6 0x23e78a1babf09189 0t0 TCP localhost:commplex-main (LISTEN)
API 26565 arturofiliovilla 241u IPv4 0x23e78a2a10910ed1 0t0 TCP localhost:commplex-main->localhost:59093 (ESTABLISHED)
也许有掩码?我不确定,但我的 dotnet 服务器没有错误。
知道为什么会这样吗?
- Node.js/Express 默认尝试绑定到
[::]:5000
and/or0.0.0.0:5000
,当你只指定端口 5000 时。这就是发生冲突的原因。 - ASP.NET 核心,但是,默认情况下绑定到
localhost:5000
。
如果你阅读更多关于计算机网络的知识,你会发现这两种绑定方法之间的差异有多大。
您可以尝试让 Express 绑定到 localhost:5000
,也就是
app.listen(port, "localhost", () => {
console.log("Server running...");
})
参考资料