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