当我在 NodeJS 应用程序中运行 nodemon 时端口 3306 已经在使用中
PORT 3306 Already In use when i rn nodemon in NodeJS app
我有一个 nodejs 应用程序,在我打开 MySQL Workbench 并且还在我的项目中包含 .env
文件之前,它一直都很好 运行ning。当我打开 MySQL Workbench 以可视化过程而不使用 mysql shell 时,我正在将系统部署到 Digital Ocean 管理的数据库服务。一切正常,我将数据库迁移到 DO 数据库集群。
我也想让我的应用程序更安全,所以我碰到了 .env
文件方法并尽力跟进,我想出了这个:
第 1 步:
npm i dotenv --save
第 2 步:将 require('dotenv').config()
添加到我的 server.js 文件
第 3 步:更新我的数据库连接文件
const mysql = require("mysql");
const conn = mysql.createConnection({
host: process.env.HOST,
user: process.env.USERNAME,
password: process.env.PASSWORD,
//rsport : (process.env.PORT),
database: process.env.DATABASE_NAME,
multipleStatements: true,
});
conn.connect((err) => {
if (err) {
console.log("Oops!, Failed to connect to the database.");
} else {
console.log("Database connection succesfull!");
}
});
module.exports = conn;
第 4 步:我相应地设置本地 .env 文件和远程 .env 文件
第5步:我运行nodemon
它return出现如下错误:
body-parser deprecated undefined extended: provide extended option server.js:27:17
events.js:292
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE: address already in use :::3306
at Server.setupListenHandle [as _listen2] (net.js:1318:16)
at listenInCluster (net.js:1366:12)
at Server.listen (net.js:1452:7)
at Function.listen (G:\Maxiko Payment System\Systems\Management Apps\Microservices\mx-core\node_modules\express\lib\application.js:618:24)
at Object.<anonymous> (G:\Maxiko Payment System\Systems\Management Apps\Microservices\mx-core\server.js:47:5)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
Emitted 'error' event on Server instance at:
at emitErrorNT (net.js:1345:8)
at processTicksAndRejections (internal/process/task_queues.js:80:21) {
code: 'EADDRINUSE',
errno: -4091,
syscall: 'listen',
address: '::',
port: 3306
}
[nodemon] app crashed - waiting for file changes before starting...
我做错了什么?老实说,我不认为 .env 与此有任何关系,但我肯定知道 MySQL Workbench 建立了自己的联系。那么我是否相信一次只有一个应用程序可以连接到数据库?这对我来说也不对。
尝试运行将您的节点 js 服务器连接到不同的端口或 运行 在命令提示符下执行此命令(以管理员身份)
netstat -ano | findstr :<PORT>
替换为您正在使用的端口号(在您的情况下为 3306)
然后它会显示你进程的PID
像这样
TCP 0.0.0.0:3306 0.0.0.0:0 LISTEN 77777
77777 是 PID
然后运行这个命令
taskkill /PID <PID> /F
替换为你在上一个命令中得到的PID
它看起来像一些其他进程已经 运行在您的 3306 端口上
您可以使用以下命令检查它
lsof -i tcp:3306
它将列出您已经在端口 3306 上的进程
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 12012 user 20u IPv6 86535 0t0 TCP *:3306 (LISTEN)
这表明 PID 为 12012 的进程已经在使用您的端口 3306
如果这个进程是多余的,你可以通过以下命令杀死它:
sudo kill -9 PID
用您的进程 ID 替换 PID,在我的例子中是 12012
否则你可以使用其他端口 运行 你的节点服务器
我找到问题了。确实有另一个进程 运行 并使用相同的端口。在应用服务器初始化脚本中,我是这样设置端口的:
app.use('port', process.env.PORT || 5000)
在 fdatabase 连接文件中,我也将端口设置为
const conn = mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
port : (process.env.DB_PORT),
database: process.env.DB_NAME,
multipleStatements: true,
});
因此,如您所见,应该存在端口冲突,因为我在 .env
文件中只有 PORT=3006
变量。
解决方案
我所要做的就是将数据库端口指定为
DB_PORT = 3006
APP_PORT = 5000
在环境变量中。
谢谢你,祝你好运。
我有一个 nodejs 应用程序,在我打开 MySQL Workbench 并且还在我的项目中包含 .env
文件之前,它一直都很好 运行ning。当我打开 MySQL Workbench 以可视化过程而不使用 mysql shell 时,我正在将系统部署到 Digital Ocean 管理的数据库服务。一切正常,我将数据库迁移到 DO 数据库集群。
我也想让我的应用程序更安全,所以我碰到了 .env
文件方法并尽力跟进,我想出了这个:
第 1 步:
npm i dotenv --save
第 2 步:将 require('dotenv').config()
添加到我的 server.js 文件
第 3 步:更新我的数据库连接文件
const mysql = require("mysql");
const conn = mysql.createConnection({
host: process.env.HOST,
user: process.env.USERNAME,
password: process.env.PASSWORD,
//rsport : (process.env.PORT),
database: process.env.DATABASE_NAME,
multipleStatements: true,
});
conn.connect((err) => {
if (err) {
console.log("Oops!, Failed to connect to the database.");
} else {
console.log("Database connection succesfull!");
}
});
module.exports = conn;
第 4 步:我相应地设置本地 .env 文件和远程 .env 文件
第5步:我运行nodemon
它return出现如下错误:
body-parser deprecated undefined extended: provide extended option server.js:27:17
events.js:292
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE: address already in use :::3306
at Server.setupListenHandle [as _listen2] (net.js:1318:16)
at listenInCluster (net.js:1366:12)
at Server.listen (net.js:1452:7)
at Function.listen (G:\Maxiko Payment System\Systems\Management Apps\Microservices\mx-core\node_modules\express\lib\application.js:618:24)
at Object.<anonymous> (G:\Maxiko Payment System\Systems\Management Apps\Microservices\mx-core\server.js:47:5)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
Emitted 'error' event on Server instance at:
at emitErrorNT (net.js:1345:8)
at processTicksAndRejections (internal/process/task_queues.js:80:21) {
code: 'EADDRINUSE',
errno: -4091,
syscall: 'listen',
address: '::',
port: 3306
}
[nodemon] app crashed - waiting for file changes before starting...
我做错了什么?老实说,我不认为 .env 与此有任何关系,但我肯定知道 MySQL Workbench 建立了自己的联系。那么我是否相信一次只有一个应用程序可以连接到数据库?这对我来说也不对。
尝试运行将您的节点 js 服务器连接到不同的端口或 运行 在命令提示符下执行此命令(以管理员身份)
netstat -ano | findstr :<PORT>
替换为您正在使用的端口号(在您的情况下为 3306)
然后它会显示你进程的PID 像这样
TCP 0.0.0.0:3306 0.0.0.0:0 LISTEN 77777
77777 是 PID
然后运行这个命令
taskkill /PID <PID> /F
替换为你在上一个命令中得到的PID
它看起来像一些其他进程已经 运行在您的 3306 端口上
您可以使用以下命令检查它
lsof -i tcp:3306
它将列出您已经在端口 3306 上的进程
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 12012 user 20u IPv6 86535 0t0 TCP *:3306 (LISTEN)
这表明 PID 为 12012 的进程已经在使用您的端口 3306
如果这个进程是多余的,你可以通过以下命令杀死它:
sudo kill -9 PID
用您的进程 ID 替换 PID,在我的例子中是 12012
否则你可以使用其他端口 运行 你的节点服务器
我找到问题了。确实有另一个进程 运行 并使用相同的端口。在应用服务器初始化脚本中,我是这样设置端口的:
app.use('port', process.env.PORT || 5000)
在 fdatabase 连接文件中,我也将端口设置为
const conn = mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
port : (process.env.DB_PORT),
database: process.env.DB_NAME,
multipleStatements: true,
});
因此,如您所见,应该存在端口冲突,因为我在 .env
文件中只有 PORT=3006
变量。
解决方案
我所要做的就是将数据库端口指定为
DB_PORT = 3006
APP_PORT = 5000
在环境变量中。
谢谢你,祝你好运。