收到错误 listen EADDRINUSE: address already in use ::5000 while restarting a server
Got an error listen EADDRINUSE: address already in use :::5000 while restarting a server
所以,我有一个简单的快速服务器,它通过 mongoose 连接到 mongoDB 地图集。
例如,我启动服务器,一切正常,但是当我重新启动时(无论是使用 nodemon 还是仅使用 node),我收到一个错误:
Error: listen EADDRINUSE: address already in use :::5000
at Server.setupListenHandle [as _listen2] (net.js:1313:16)
at listenInCluster (net.js:1361:12)
at Server.listen (net.js:1447:7)
at Function.listen (C:\Users\Олег\e-commerce-mern\MERN-shop-app\node_modules\express\lib\application.js:618:24)
at Object.<anonymous> (C:\Users\Олег\e-commerce-mern\MERN-shop-app\backend\server.js:36:20)
at Module._compile (internal/modules/cjs/loader.js:1138:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
at Module.load (internal/modules/cjs/loader.js:986:32)
at Function.Module._load (internal/modules/cjs/loader.js:879:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
at internal/main/run_main_module.js:17:47
Emitted 'error' event on Server instance at:
at emitErrorNT (net.js:1340:8)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
code: 'EADDRINUSE',
errno: 'EADDRINUSE',
syscall: 'listen',
address: '::',
port: 5000
}
在重新启动一两次后,我的服务器开始正常工作,没有错误,但是,再次保存后,问题又重复了,我不知道为什么。
db.js:
const mongoose = require('mongoose');
const mongoConnection = () => {
return mongoose.connect(process.env.MONGO_URI, {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true,
});
};
module.exports = mongoConnection;
server.js:
const express = require('express');
const products = require('./data/products'); //my mock data
const dotenv = require('dotenv');
// eslint-disable-next-line no-unused-vars
const colors = require('colors');
const dbConnect = require('./config/db');
dotenv.config();
dbConnect()
.then(() => {
// callback();
console.log('db connected');
})
.catch((err) => {
console.error(`Error: ${error.message}`.red.underline.bold);
process.exit(1);
});
const app = express();
app.get('/', (req, res) => {
res.send('app is running');
});
app.get('/api/products', (req, res) => {
res.json(products);
});
app.get('/api/products/:id', (req, res) => {
const product = products.find((p) => p._id === req.params.id);
res.json(product);
});
const PORT = process.env.port || 5000;
const server = app.listen(PORT,
// eslint-disable-next-line max-len
console.log(`server running in ${process.env.NODE_ENV} on port ${PORT}`.yellow.bold));
process.on('unhandledRejection', (err) => {
console.log('err', err.name, err.message);
console.log('unhadled rejection');
server.close(() => {
process.exit(1);
});
});
如您所见,这里没什么特别的,是的,我知道我的端口在重启时没有被杀死,但我不明白这种行为以及如何防止它。
P.S。我正在使用 windows.
出现此错误是因为任何应用程序 运行正在端口 5000 上连接。
要修复它,你只需要杀死端口 5000 上的 运行ning 应用程序。
按照以下步骤操作:
第 0 步:停止您的应用程序如果您当前正在尝试 运行 它在端口 5000
第 1 步:运行 管理员身份的命令提示符
第 2 步:运行
-->“ netstat -ano | findstr :5000
”<--
命令查找 运行ning 应用程序的 pid 号。
注意:在我的例子中是 4208
第 4 步:运行 taskkill /PID {pid number} /F
终止 运行ning 进程。
现在您可以运行您的应用在端口 5000
更新:获得了终止进程的快捷方式
只是 运行 TASKKILL /IM node.exe /F
然后启动您的应用程序:-)
所以,我有一个简单的快速服务器,它通过 mongoose 连接到 mongoDB 地图集。 例如,我启动服务器,一切正常,但是当我重新启动时(无论是使用 nodemon 还是仅使用 node),我收到一个错误:
Error: listen EADDRINUSE: address already in use :::5000
at Server.setupListenHandle [as _listen2] (net.js:1313:16)
at listenInCluster (net.js:1361:12)
at Server.listen (net.js:1447:7)
at Function.listen (C:\Users\Олег\e-commerce-mern\MERN-shop-app\node_modules\express\lib\application.js:618:24)
at Object.<anonymous> (C:\Users\Олег\e-commerce-mern\MERN-shop-app\backend\server.js:36:20)
at Module._compile (internal/modules/cjs/loader.js:1138:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
at Module.load (internal/modules/cjs/loader.js:986:32)
at Function.Module._load (internal/modules/cjs/loader.js:879:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
at internal/main/run_main_module.js:17:47
Emitted 'error' event on Server instance at:
at emitErrorNT (net.js:1340:8)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
code: 'EADDRINUSE',
errno: 'EADDRINUSE',
syscall: 'listen',
address: '::',
port: 5000
}
在重新启动一两次后,我的服务器开始正常工作,没有错误,但是,再次保存后,问题又重复了,我不知道为什么。 db.js:
const mongoose = require('mongoose');
const mongoConnection = () => {
return mongoose.connect(process.env.MONGO_URI, {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true,
});
};
module.exports = mongoConnection;
server.js:
const express = require('express');
const products = require('./data/products'); //my mock data
const dotenv = require('dotenv');
// eslint-disable-next-line no-unused-vars
const colors = require('colors');
const dbConnect = require('./config/db');
dotenv.config();
dbConnect()
.then(() => {
// callback();
console.log('db connected');
})
.catch((err) => {
console.error(`Error: ${error.message}`.red.underline.bold);
process.exit(1);
});
const app = express();
app.get('/', (req, res) => {
res.send('app is running');
});
app.get('/api/products', (req, res) => {
res.json(products);
});
app.get('/api/products/:id', (req, res) => {
const product = products.find((p) => p._id === req.params.id);
res.json(product);
});
const PORT = process.env.port || 5000;
const server = app.listen(PORT,
// eslint-disable-next-line max-len
console.log(`server running in ${process.env.NODE_ENV} on port ${PORT}`.yellow.bold));
process.on('unhandledRejection', (err) => {
console.log('err', err.name, err.message);
console.log('unhadled rejection');
server.close(() => {
process.exit(1);
});
});
如您所见,这里没什么特别的,是的,我知道我的端口在重启时没有被杀死,但我不明白这种行为以及如何防止它。 P.S。我正在使用 windows.
出现此错误是因为任何应用程序 运行正在端口 5000 上连接。 要修复它,你只需要杀死端口 5000 上的 运行ning 应用程序。 按照以下步骤操作:
第 0 步:停止您的应用程序如果您当前正在尝试 运行 它在端口 5000
第 1 步:运行 管理员身份的命令提示符
第 2 步:运行
-->“ netstat -ano | findstr :5000
”<--
命令查找 运行ning 应用程序的 pid 号。
注意:在我的例子中是 4208
第 4 步:运行 taskkill /PID {pid number} /F
终止 运行ning 进程。
现在您可以运行您的应用在端口 5000
更新:获得了终止进程的快捷方式
只是 运行 TASKKILL /IM node.exe /F 然后启动您的应用程序:-)