You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

发送POST请求时遇net::ERR_CONNECTION_REFUSED错误求助

问题描述
  • 前端提交用户注册请求(获取JWT Token)时,浏览器网络面板报错:POST https://localhost:8000/auth/registration net::ERR_CONNECTION_REFUSED,控制台输出Fetching data error: AxiosError: Network Error
  • Postman测试时收到错误:Error: connect ECONNREFUSED 127.0.0.1:5000
  • 已确认端点路径正确,授权逻辑、Node.js数据库服务均正常运行,更换端口无效果,自行编写的端口检测代码显示目标端口未开放

附server.js代码:

const express = require("express")
const mongoose = require("mongoose")
const authRouter = require("./routes/authRouter.js")
const net = require("net")

const PORT = 8000

const app = express()
app.use(express.json({ extended: true}))
app.use("/auth", authRouter)

const DB_URL = `mongodb+srv://yurailchshyn:register@jwttodo.xvuveru.mongodb.net/?retryWrites=true&w=majority`

app.get("/getter", (req, res) => {
    res.status(200).json({message: "Hello"})
})

class PortChecker {

    async testPort(port, host) {

        return new Promise((resolve, reject) => {
            const socket = new net.Socket()

            socket.on("connect", () => {
                socket.destroy()
                resolve("yes")
            })

            socket.on("timeout", () => {
                socket.destroy()
                resolve("no (timeout)")
            })

            socket.on("error", () => {
                socket.destroy()
                resolve("no (error)")
            })

            socket.connect(port, host)
        })
    }
}

app.get("/something", (req, res) => {
    try {
        res.status(200).end("Some hello")
    } catch(error) {
        res.status(500).json({message: "something went wrong"})
    }
})

let pc = new PortChecker

pc.testPort(5000, "127.0.0.1").then((result) => {
    console.log(`Is port open? ${result}`)
}).catch(error => {
    console.log("Fatal error", error)
    process.exit(1)
})

const start = async () => {
    try {
        await mongoose.connect(DB_URL)
        app.listen(PORT, () => console.log(`Server is working on PORT: ${PORT}`))
    } catch (error) {
        console.log("Server is not working!!!", error)
    }
}

start()
排查与解决方案

1. 端口不一致问题

代码中服务器监听端口为8000,但Postman测试的是5000端口,先统一端口:

  • 要么修改前端请求和Postman测试的目标端口为8000
  • 要么将代码中const PORT = 8000改为const PORT = 5000

2. 端口检测时机错误

当前代码在服务器启动前就检测5000端口,此时服务器尚未启动,必然返回端口未开放。需将检测逻辑移至服务器启动成功的回调中:

const start = async () => {
    try {
        await mongoose.connect(DB_URL)
        app.listen(PORT, async () => {
            console.log(`Server is working on PORT: ${PORT}`)
            // 服务器启动后再检测当前监听端口
            let pc = new PortChecker
            const result = await pc.testPort(PORT, "127.0.0.1")
            console.log(`Is port ${PORT} open? ${result}`)
        })
    } catch (error) {
        console.log("Server is not working!!!", error)
    }
}

3. 数据库连接阻塞问题

若MongoDB连接失败或耗时过长,会导致服务器无法启动。优化数据库连接逻辑,添加状态日志:

await mongoose.connect(DB_URL, {
    useNewUrlParser: true,
    useUnifiedTopology: true
})
.then(() => console.log("MongoDB连接成功"))
.catch(err => console.log("MongoDB连接失败:", err))

同时确认本地网络可正常访问MongoDB Atlas,连接字符串的用户名、密码、集群地址无误。

4. 路由端点验证

检查./routes/authRouter.js中是否正确定义了POST /registration端点,示例正确结构:

const router = require('express').Router();

router.post('/registration', (req, res) => {
    // 注册逻辑处理
    res.status(201).json({ token: "生成的JWT Token" });
});

module.exports = router;

5. 本地端口占用排查

即使更换端口,可能存在其他进程占用目标端口:

  • Windows系统:执行netstat -ano | findstr :8000查看占用进程,通过任务管理器杀掉对应PID的进程
  • Linux/macOS系统:执行lsof -i :8000查看占用进程,执行kill -9 进程PID终止进程

内容的提问来源于stack exchange,提问作者Юрій Ільчишин

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 22:45:13