繁体   English   中英

错误:监听 EADDRINUSE:地址已在使用中:::3306

[英]Error: listen EADDRINUSE: address already in use :::3306

我正在尝试使用 MySQL 和 Node.JS 创建一个日志系统。 但是我收到了您在下面看到的错误,我仍在积极寻找解决方案,但找不到。 我决定问你。

.env

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

PORT = 3000

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)

})

const port = process.env.DB_PORT

app.listen(port, 
    () => console.log('Server started on port ${port}...'))

console.log(process.env.DB_PASSWORD)

似乎端口 3306 已被使用。 3306 是 MySQL 标准端口,因此很可能您的 MySQL 实例已经在运行,这正是您想要的。

您只能在一个端口后面运行一项服务。 这就是端口将流量定向到可以处理该流量或期望该流量的进程的目的。

要解决此问题,请使用const port = process.env.PORT而不是const port = process.env.DB_PORT 然后,您的 Express 服务器在端口3000上运行,您的 MySQL 服务器在端口3306上运行。

仅供参考:如果未设置环境变量,您应该指定一些默认值(或错误)。 您可能已将它们与您的.env文件一起设置在此处,并且有一天您可能想在另一个环境中运行服务器,并且您会忘记配置某些东西并想知道为什么您的服务器崩溃了。

对于初学者来说,一种快速简便的解决方案是使用逻辑( || )。 这将设置环境变量中设置的端口或默认值3000

 // Mocking process.env const process = { env: {}} // process.env.PORT is not defined here so the default value will be used const port = process.env.PORT || 3000; console.log(`Port: ${port}`)

您可能还对dotenv npm package 感兴趣

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM