簡體   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