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
相关产品推荐
相关产品推荐

