Node.js应用启动报EADDRINUSE错误求助
问题根源与解决方案
错误原因
你的server.js中重复调用了app.listen():
- 第15行先启动服务器,占用端口4000并输出「Server Listining on port: 4000」
- 数据库连接成功后(第22行),再次调用
app.listen()尝试监听同一端口,此时端口已被占用,触发EADDRINUSE错误导致应用崩溃。
哪怕更换端口,两次监听的逻辑未修正,问题会持续出现。
修正后的代码
删除第一次app.listen()调用,仅在数据库连接成功后启动服务器:
const express = require('express'); const app = express(); const connectDB = require('./db/db'); app.get('/', (req, res) => { const obj = { name: 'jam', email: 'jam@j.com' } res.json(obj); }) const PORT = 4000; connectDB(`mongodb://localhost:27017/attendance-db`) .then(() => { console.log('Database Connected Successfully'); // 仅在数据库连接成功后启动服务器 app.listen(PORT, () => { console.log(`Server listening on port: ${PORT}`) }) }) .catch((e) => console.log(e))
额外优化建议
- 用
const声明PORT变量,避免全局变量污染与意外修改 - 修正日志拼写错误:
Listining改为listening - 可给服务器实例添加错误监听,避免未捕获错误导致崩溃:
const server = app.listen(PORT, () => { console.log(`Server listening on port: ${PORT}`) }) server.on('error', (err) => { console.error('Server startup error:', err); process.exit(1); })
内容的提问来源于stack exchange,提问作者President Jam
相关产品推荐
相关产品推荐

