Поймать EADDRINUSE от ChildProcess - PullRequest
0 голосов
/ 23 мая 2019

У меня есть процесс порождения, работающий на http-сервере. Это мой упрощенный код:

const params = ['node_modules/http-server/bin/http-server', '--cors', '-p'];
const proc = cp.spawn('node', params, { stdio: 'inherit' });
// the next callback is never triggered
proc.on('error', err => {
  log(err.toString(), LogType.Error); // this is my custom log method
  process.exit(1);
});

Если предыдущий процесс не был очищен должным образом, порт все еще будет использоваться, что приведет к ошибке EADDRINUSE . Я пытаюсь перехватить эту ошибку, чтобы правильно сообщить о ней пользователю и выйти из процесса, но мне не удается ее перехватить.

Я пытался использовать on, emit, один раз, addListener, stderr, но ничего не ловит ошибку.

Процесс не работает, и ничего не регистрируется, кроме внутренней ошибки:

Error: listen EADDRINUSE: address already in use 0.0.0.0:8082
  at Server.setupListenHandle [as _listen2] (net.js:1259:14)
  at listenInCluster (net.js:1307:12)
  at doListen (net.js:1446:7)
  at processTicksAndRejections (internal/process/task_queues.js:81:17)
  at process.runNextTicks [as _tickCallback] (internal/process/task_queues.js:56:3)
  at Function.Module.runMain (internal/modules/cjs/loader.js:880:11)
  at internal/main/run_main_module.js:21:11

Emitted 'error' event at:
  at emitErrorNT (net.js:1286:8)
  at processTicksAndRejections (internal/process/task_queues.js:81:17)
  [... lines matching original stack trace ...]
  at internal/main/run_main_module.js:21:11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...