我创建了一个非常简单的节点服务器,并使用nodemon app.js运行它。服务器启动成功,但如果我在脚本中进行更改并保存,则会出现有关EADDR in use的错误。节点进程未终止或未退出。在package.json中,我为nodemon设置了delay参数。
我的app.js (干净)它不工作:
const express = require('express')
const app = express()
const PORT = 5000;
const routes = require('./Settings/routes')
app.use(express.json())
routes(app)
app.listen(PORT, ()=>
console.log('Сервер работает на порту ' + PORT)
)我的app.js (经过改进),但它也不能工作
const express = require('express')
const app = express()
const PORT = 5000;
const routes = require('./Settings/routes')
app.use(express.json())
routes(app)
app.listen(PORT, ()=>
console.log('Сервер работает на порту ' + PORT)
)
// first create a generic "terminator"
terminator = function(sig){
if (typeof sig === "string") {
console.log('%s: Received %s - terminating sample app ...',
new Date(Date.now()), sig);
process.kill(process.pid, sig)
}
console.log('%s: Node server stopped.', new Date(Date.now()) );
};
const arrayOfSignals = [ 'SIGUSR2', 'SIGTERM']
// then implement it for every process signal related to exit/quit
arrayOfSignals.forEach(function(element, index, array) {
process.on(element, function() {
console.log('Ожидаем перезапуск процесса')
terminator(element)
});
});我试着用process.exit()和process.kill()
我原以为节点一定是从beginning...What开始工作的,我不是这样做的吗?
更新:控制台错误:
[nodemon] 2.0.7
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node app.js`
events.js:353
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE: address already in use :::5000
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 (/chokoapp/backend/node_modules/express/lib/application.js:618:24)
at Object.<anonymous> (/chokoapp/backend/app.js:15:5)
at Module._compile (internal/modules/cjs/loader.js:1068:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1097:10)
at Module.load (internal/modules/cjs/loader.js:933:32)
at Function.Module._load (internal/modules/cjs/loader.js:774: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:82:21) {
code: 'EADDRINUSE',
errno: -98,
syscall: 'listen',
address: '::',
port: 5000
}
[nodemon] app crashed - waiting for file changes before starting...
操作系统: Ubuntu 18.04
Node -v: 14.17.0
发布于 2021-06-21 16:27:53
错误:侦听EADDRINUSE:地址已在使用:5000
这意味着端口5000已在使用中。因此您不能将此端口用于express服务器。
我将提出两个解决方案。
1.更改express服务器的端口号。
对类似const PORT = 8000;的内容执行const PORT = 5000;
2.杀死正在使用5000端口的进程。
首先,您需要知道哪个进程正在使用port 5000
sudo lsof -i :5000或在Windows CMD中,netstat -ano | findstr 5000
这将列出在此端口上侦听的所有PID,一旦您有了PID,您就可以使用以下命令终止它:
kill -9 {PID}
发布于 2021-10-26 06:39:32
当我遇到类似的问题时,一个简单的修复方法是在package.json文件中延迟Nodemon的重启:
nodemon --delay 500ms app.js这似乎为端口的正确释放提供了一点时间。
https://stackoverflow.com/questions/68059282
复制相似问题