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

Node.js+MySQL日志系统开发遇EADDRINUSE端口占用错误求助

解决Error: listen EADDRINUSE: address already in use :::3306问题

错误原因很直接:你让Express服务监听了MySQL正在使用的3306端口,这个端口是MySQL的默认端口,已经被数据库占用,自然会触发端口冲突报错。

看你的代码,问题出在这一行:

const port = process.env.DB_PORT

你把数据库的端口赋值给了Express服务的监听端口,而不是使用.env里专门定义的PORT=3000。

修改方案

把端口定义改成读取process.env.PORT,同时修正console.log里的模板字符串错误(你用了单引号,模板字符串需要用反引号):

修改后的Node.js代码:

const express = require('express');
const app = express();

const mysql = require('mysql');

require('dotenv').config({path: './dbInfo.env'})

const db = mysql.createPool({
    connectionLimit: 100,
    host: process.env.DB_HOST,
    user: process.env.DB_USER,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_DATABASE,
    port: process.env.DB_PORT
})

db.getConnection( (err, connection) => {
    if (err) throw (err)
    console.log("DB connected succesful:" + connection.threadId)
})

// 改为读取Express服务的端口配置
const port = process.env.PORT

// 模板字符串改用反引号才能正确解析变量
app.listen(port, 
    () => console.log(`Server started on port ${port}...`))

console.log(process.env.DB_PASSWORD)

你的.env配置本身是正确的,无需修改:

DB_HOST = 127.0.0.1
DB_USER = newuser
DB_PASSWORD = password123#
DB_DATABASE = userDB
DB_PORT = 3306

PORT = 3000

修改后重新启动服务,Express会监听3000端口,和MySQL的3306端口不再冲突,问题即可解决。


内容的提问来源于stack exchange,提问作者prf00

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:31:13