expressJS и nodemon на Ctrl + C и перезапуск: Ошибка: привязать EADDRINUSE null: 3000 при остановке и перезапуске - PullRequest
0 голосов
/ 05 августа 2020

Когда я запускаю yarn dev, он запускает nodemon через сценарий запуска. Когда мой express сервер запущен и работает, если я Ctrl + C на нем, попробуйте снова запустить yarn dev, я получаю:

Error: bind EADDRINUSE null:3000
    at listenOnMasterHandle (net.js:1380:18)
    at rr (internal/cluster/child.js:132:12)
    at Worker.<anonymous> (internal/cluster/child.js:99:7)
    at process.onInternalMessage (internal/cluster/utils.js:47:8)
    at process.emit (events.js:327:22)
    at emit (internal/child_process.js:906:12)
    at processTicksAndRejections (internal/process/task_queues.js:85:21)
Emitted 'error' event on Server instance at:
    at listenOnMasterHandle (net.js:1381:21)
    at rr (internal/cluster/child.js:132:12)
    [... lines matching original stack trace ...]
    at processTicksAndRejections (internal/process/task_queues.js:85:21) {
  errno: -48,
  code: 'EADDRINUSE',
  syscall: 'bind',
  address: null,
  port: 3000
}

enter image description here

Here it is running the first time I fire it up after say I reboot my machine and there are no processes running yet:

enter image description here

The only way I can manually kill it and temporarily move on is to use pkill node. lsof -i :3000 -t | xargs kill` doesn't work.

If I then Ctrl + C then run yarn dev I get:

введите описание изображения здесь Вот мои скрипты

"start": "PORT=3000 nodemon --trace-warnings dist/server/server.js",
"build": "NODE_ENV=production webpack -p --env=prod --watch && yarn compile-server && yarn start",
"dev": "NODE_ENV=development yarn lint && yarn copyData && yarn compile-server && yarn start & webpack-dev-server",
"compile-server": "tsc -b ./src/server",
"copyData": "mkdir -p dist/shared/data && cp src/shared/data/companies.json dist/shared/data && cp src/shared/data/countries.json dist/shared/data",

server.ts const app = require ('./ api. js');

const cluster = require('cluster'),
    os = require('os'),
    port = process.env.PORT || 3000;

if (cluster.isMaster) {
    for (let i = 0; i < os.cpus().length; i++) {
        cluster.fork();
    }
    console.log('Ready on port %d', port);
} else {
    app.listen(port, (err: string) => {
        console.log(`express is listening on port ${port}`);
        if (err) {
            console.log('server startup error');
            console.log(err);
        }
    });
}
...