node.js - express api,为什么会出现Error: listen EADDRINUSE :::5000
问题描述
我正在使用此代码创建一个简单的 express api
//server.js
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());
const db = require('./config/keys').mongoURI;
mongoose
.connect(db, { useNewUrlParser: true })
.then(() => console.log('db connected'))
.catch(err => console.error(err))
const port = process.env.PORT || 5000;
app.listen(port, () => console.log('server connected'))
//config/keys.js
module.exports = {
mongoURI: 'mongodb://db address'
};
当我运行它或对文件进行更改时,我总是得到一个错误
Error: listen EADDRINUSE :::5000
at Server.setupListenHandle [as _listen2] (net.js:1327:14)
at listenInCluster (net.js:1375:12)
at Server.listen (net.js:1462:7)
at Function.listen (/Users/user/Desktop/mern-2/node_modules/express/lib/application.js:618:24)
at Object.<anonymous> (/Users/user/Desktop/mern-2/server.js:18:5)
at Module._compile (internal/modules/cjs/loader.js:702:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10)
at Module.load (internal/modules/cjs/loader.js:612:32)
at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
at Function.Module._load (internal/modules/cjs/loader.js:543:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:744:10)
at startup (internal/bootstrap/node.js:238:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:572:3)
Emitted 'error' event at:
at emitErrorNT (net.js:1354:8)
at process._tickCallback (internal/process/next_tick.js:63:19)
at Function.Module.runMain (internal/modules/cjs/loader.js:746:11)
at startup (internal/bootstrap/node.js:238:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:572:3)
我可以通过运行来解决这个问题lsof -i :5000
,然后kill
节点返回
为什么我会收到此错误,有没有办法阻止它
解决方案
该错误Error: listen EADDRINUSE :::5000
是自我描述的。
看起来另一个应用程序正在侦听端口5000
,或者您的同一应用程序的另一个实例已经在系统中运行。
您终止进程的解决方案有效 - 因为您在那里终止了正在侦听端口 5000 的进程。
从给出的信息中无法立即明确它是您自己的应用程序的另一个实例,还是使用端口 5000 的不同应用程序。
如果它是另一个应用程序(您可以通过查看来确定lsof -i -n -P
),您应该使用另一个端口。
如果它是您自己应用程序的另一个实例,请确保Ctrl + C
在编辑之前终止正在运行的实例 ( )。
也许你可以使用Nodemon