Express与Node.js分离app和server后Postman请求ECONNREFUSED报错
Express/Node.js分离app与server后Postman请求ECONNREFUSED 127.0.0.1:3000问题
将Express与Node.js项目中的app和server文件分离后,终端显示数据库及Node服务已在3000端口正常运行,但使用Postman请求app.get('/')等接口时,出现Error: connect ECONNREFUSED 127.0.0.1:3000错误,调整相关设置后仍未解决。
关键代码
./routes/users.js
const express = require('express'); const router = express.Router(); const { registerUser, getUserList, login, updateUser, deleteUser } = require('../controller/users'); const validateToken = require('../middlewares/auth'); router.post('/login', login); router.post('/registeruser', registerUser); router.get('/list', validateToken, getUserList); router.patch('/update/:userId', validateToken, updateUser); router.delete('/delete', validateToken, deleteUser); module.exports = router;
connect.js(数据库连接)
const mongoose = require('mongoose'); const color = require('colorette'); const connectDB = (url) => { try { return mongoose.connect(url, { useNewUrlParser: true, useUnifiedTopology: true, }); } catch (error) { console.log(color.bgRed(error)); } }; module.exports = connectDB;
server.js
const app = require('./app'); const http = require('http') const port = process.env.PORT || 3000; const connectDB = require("./database/connect"); const server = http.createServer(app); const color = require('colorette'); // 处理未捕获的异常 process.on('uncaughtException', function (err) { console.log(color.red(`Uncaught Exception Error Occurred ${err}`)); }); const startDB = async () => { try { await connectDB(process.env.MONGO_URL); console.log(color.blue(`DB server is connected`)); server.listen(() => { console.log(color.blue(`Node server is running on port ${port}...`)); }) } catch (error) { console.log(color.red(`ERROR is ${error}`)); } }; startDB();
app.js
require("dotenv").config(); const express = require("express"); const app = express(); const cors = require('cors') const users = require("./routes/users"); app.use(cors()); app.use(express.json()); app.get('/', (req, res) => { res.status(200).json(`Hello World`); }) app.use('a/user', users); module.exports = app
终端输出
> nodemon server.js [nodemon] 3.0.1 [nodemon] to restart at any time, enter `rs` [nodemon] watching path(s): *.* [nodemon] watching extensions: js,mjs,cjs,json [nodemon] starting `node server.js` DB server is connected Node server is running on port 3000...
Postman报错信息
Error: connect ECONNREFUSED 127.0.0.1:3000 Proxy id: "958df20d-86ee-40af-8d08-4c3274d302ca" disabled: false host: "127.0.0.1" match: {…} port: 3000 tunnel: false authenticate: false Request Headers Content-Type: application/json Cache-Control: no-cache Postman-Token: 515bf6ca-1031-4198-8fda-9c0f99b55c83 Host: localhost:3000 Connection: keep-alive
问题原因及解决方案
核心问题
server.js中调用server.listen()时未传入端口参数,导致服务器并未实际监听3000端口,终端日志的提示存在误导。
修复步骤
修改server.js中的server.listen()调用,传入指定端口:
server.listen(port, () => { console.log(color.blue(`Node server is running on port ${port}...`)); })
额外优化点
- Postman代理配置:当前报错显示Postman启用了指向
127.0.0.1:3000的代理,会导致请求循环代理引发连接拒绝,建议关闭Postman代理或调整配置。 - 路由前缀修正:
app.js中app.use('a/user', users)的前缀缺少开头的/,应改为app.use('/a/user', users),避免路由匹配异常。
内容的提问来源于stack exchange,提问作者Mrigendrakumar P
相关产品推荐
相关产品推荐

