【问题标题】:Error: listen EADDRINUSE: address already in use :::5000 BUT dotnet server does let me run api in port 5000错误:监听 EADDRINUSE:地址已在使用 :::5000 但 dotnet 服务器确实让我在端口 5000 中运行 api
【发布时间】:2022-01-21 02:40:47
【问题描述】:

我知道这个错误已经被问了一百万次,但我相信答案不是正确的或者不是最有效的。

// 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,则一切正常。如果我停用空中播放端口,一切正常。

我的问题是当我在 PORT 5000 中运行 dotnet api 服务器时没有错误。

为什么我可以在 5000 中运行 dotnet 服务器没有问题,但在节点中却给我一个错误?

我运行 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 服务器没有错误。

任何想法为什么会发生这种情况?

【问题讨论】:

  • 只是为了确保:您没有尝试同时运行 .net 和节点应用程序,是吗?
  • 是的,我没有同时运行两台服务器。

标签: node.js .net api server port


【解决方案1】:
  1. 默认情况下,Node.js/Express 尝试绑定到 [::]:5000 和/或 0.0.0.0:5000,而您只指定端口 5000。这就是发生冲突的原因。
  2. 但是,ASP.NET Core 默认绑定到localhost:5000

如果您阅读更多有关计算机网络的内容,您会发现这两种绑定方法之间的差异有多么巨大。

你可以尝试让 Express 绑定到localhost:5000,也就是

app.listen(port, "localhost", () => {
    console.log("Server running...");
})

参考文献

【讨论】:

    猜你喜欢
    • 2020-11-09
    • 2020-07-25
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 2020-04-08
    • 2021-02-26
    相关资源
    最近更新 更多