【问题标题】:Got an error listen EADDRINUSE: address already in use :::5000 while restarting a server重新启动服务器时出现错误监听 EADDRINUSE: address already in use :::5000
【发布时间】:2021-10-07 17:05:19
【问题描述】:

所以,我有一个简单的快速服务器,它通过 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);
  });
});

如您所见,这里没有什么太花哨的,是的,我知道我的端口在重新启动时没有被杀死,但我不明白这种行为以及如何防止它。 附注我正在使用 Windows。

【问题讨论】:

  • 这意味着一个进程已经在该端口上运行。检查一下如何杀死它:stackoverflow.com/q/39632667(还要确保它也不重要)
  • 显然,当您尝试启动一个新实例时,您的上一个服务器实例有时并没有关闭。在启动新实例之前,您必须手动终止服务器的前一个实例。

标签: node.js mongodb express process port


【解决方案1】:

由于任何应用程序在端口 5000 上运行而引发此错误。 要修复它,您只需终止端口 5000 上正在运行的应用程序。 请按照以下步骤操作:

第 0 步:停止您的应用程序如果您当前正尝试在端口 5000 上运行它

第 1 步:以管理员身份运行命令提示符

第 2 步:运行 -->" netstat -ano | findstr :5000 "

注意:在我的例子中是4208

第四步:运行 taskkill /PID {pid number} /F 杀死正在运行的进程。

现在您可以在端口 5000 上运行您的应用

更新:有一个杀死进程的快捷方式

只需运行 TASKKILL /IM node.exe /F 然后启动您的应用程序:-)

【讨论】:

    猜你喜欢
    • 2021-02-20
    • 1970-01-01
    • 2021-01-18
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 2022-12-26
    • 2022-10-23
    相关资源
    最近更新 更多