Javascript 使用async/await通过Nodemon和Express应用程序不断获取EADDRINUSE在用错误
这让我抓狂——我曾尝试使用Javascript 使用async/await通过Nodemon和Express应用程序不断获取EADDRINUSE在用错误,javascript,node.js,express,async-await,nodemon,Javascript,Node.js,Express,Async Await,Nodemon,这让我抓狂——我曾尝试使用async/await制作一个简单的Express应用程序,效果很好,但当它使用nodemon重新启动时,我总是会遇到使用错误。我使用的是节点版本11.15,它在MacOS下运行 服务器已启动并在端口4321上运行 events.js:170 投掷者;//未处理的“错误”事件 ^ 错误:侦听EADDRINUSE:地址已在使用中:::4321 在Server.setupListenHandle[as _listen2](net.js:1259:14) 在ListeniCl
async/await
制作一个简单的Express应用程序,效果很好,但当它使用nodemon
重新启动时,我总是会遇到使用错误。我使用的是节点版本11.15,它在MacOS下运行
服务器已启动并在端口4321上运行
events.js:170
投掷者;//未处理的“错误”事件
^
错误:侦听EADDRINUSE:地址已在使用中:::4321
在Server.setupListenHandle[as _listen2](net.js:1259:14)
在ListeniCluster(net.js:1307:12)
在Server.listen(net.js:1395:7)
在Function.listen(/Users/abc/Documents/Projects/sandbox/axa/node_modules/express/lib/application.js:618:24)
在侦听时(/Users/abc/Documents/Projects/sandbox/axa/src/server.js:28:15)
在tryCatch(/Users/abc/Documents/Projects/sandbox/axa/node_modules/registrator runtime/runtime.js:45:40)
在Generator.invoke[as_invoke](/Users/abc/Documents/Projects/sandbox/axa/node_modules/registrator runtime/runtime.js:271:22)
在Generator.prototype.(匿名函数)[as next](/Users/abc/Documents/Projects/sandbox/axa/node_modules/registrator runtime/runtime.js:97:21)
在asyncGeneratorStep(/Users/abc/Documents/Projects/sandbox/axa/src/server.js:26:103)
下一站(/Users/abc/Documents/Projects/sandbox/axa/src/server.js:28:194)
在processTicksAndRejections(internal/process/task_queues.js:86:5)中,在以下位置发出“error”事件:
在emitErrorNT(net.js:1286:8)
在处理和拒绝时(内部/process/task_queues.js:81:17)
我尝试在许多位置终止进程——例如在我的nodemon.json
文件中,我得到了kill端口--start
、restart
和crash
的端口4321
。我的应用程序一开始会关闭端口——从My package.json开始:
"start": " nodemon --exec 'kill-port --port 4321 & babel-node src/index.js'",
然而,如果我键入一个文件,然后nodemon
重新启动应用程序,我就会得到EADDRINUSE错误。我觉得我转换为异步/await
时一定出了什么问题,但我不知道。我的服务器设置如下--我在app.listen()之后发生崩溃。我做错了什么?这里是否有一些东西不是在回报承诺,而是我在使用wait
?我如何解决这个错误?谢谢你的帮助,我花了好几个小时想弄明白
mongoose.set('useCreateIndex', true);
const {
env: { DATABASE_URL, PORT, SERVICE_LOAD_INTERVAL = 600000 }
} = process;
const server = async () => {
try {
await mongoose.connect(DATABASE_URL, {
useNewUrlParser: true,
useUnifiedTopology: true
});
const app = express();
app.use(cors());
app.use("/api", routes());
await setupDB();
taskSetup(setupDB, SERVICE_LOAD_INTERVAL);
await app.listen(PORT);
console.log(`server up and running on port ${PORT}`);
} catch (e) {
logger.error(`Server Initialisation Error: ${e.message}`);
}
};
我的package.json文件是
{
"scripts": {
"start": " nodemon --exec 'kill-port --port 4321 & babel-node src/index.js'",
"lint": "eslint \"src/**/*.{js}\" --quiet",
"test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
"axios": "^0.19.0",
"body-parser": "^1.19.0",
"cors": "^2.8.5",
"dotenv": "^8.1.0",
"express": "^4.17.1",
"express-async-handler": "^1.1.4",
"express-jwt": "^5.3.1",
"express-jwt-permissions": "^1.3.1",
"express-session": "^1.16.2",
"jsonwebtoken": "^8.5.1",
"kill-port": "^1.5.2",
"mongodb": "^3.3.2",
"mongoose": "^5.7.1",
"winston": "^3.2.1"
},
"devDependencies": {
"@babel/core": "^7.6.0",
"@babel/node": "^7.6.1",
"@babel/preset-env": "^7.5.5",
"@types/express": "^4.17.1",
"eslint": "^6.2.2",
"eslint-config-prettier": "^6.1.0",
"nodemon": "^1.19.2",
"prettier": "^1.18.2"
}
}
我在wait应用程序中使用PORT
代码>是4321吗?还有,你为什么要等待应用程序。听着-它会返回承诺吗?(提示:它没有)你可以在应用程序之前放一个控制台。日志。听行(删除多余的等待)@JaromandaX--setupDB
正在从两个远程站点提取数据并将其存储在MongoDB中--代码在这里--'taskSetup`只是定期重复该操作。这是该文件的完整代码:export const taskSetup=(task,time=60000)=>{setInterval(task,time)}
@JaromandaX——是的,端口是4321I,我已经删除了关于setupDB的注释,因为它不再相关:p