Как остановить дочерний процесс из childProcess.stderr.on ('data') - PullRequest
0 голосов
/ 02 октября 2018

Я получил ошибку в моем stderr, но они не запускаются и обрабатывают выход с кодом 0. Поэтому я анализирую свой stderr и пытаюсь остановить дочерний процесс внутри этой функции.Вот мой код:

    exports.runCmd = function (req, res, cmd, originalFile, newFile) {
  const promise = spawn(cmd, { shell: true })
  const childProcess = promise.childProcess

  console.log(cmd)

  childProcess.stderr.on('data', function (data) {
    console.error("STDERR:", data.toString())
    if (data.toString() === 'Can not open the file as archive' || data.includes('Document is empty')) {
      childProcess.kill()
      genericFunctions.resError(res, 415, 'Type de fichier non supporté 3')
    }
  })
  childProcess.stdout.on('data', function (data) {
    //console.log("STDOUT:", data.toString())
  })
  childProcess.on('error', function (err) {
    genericFunctions.resError(res, 415, 'Type de fichier non supporté 4', err)
  })
  childProcess.on('exit', function (exitCode) {
    console.log("Child exited with code: " + exitCode)

    if (res === undefined) {
      fs.unlinkSync(originalFile)
      return true
    } else if (!fs.existsSync(newFile)) {
      console.log('Le fichier n\'existe pas')
      genericFunctions.resError(res, 415, 'Type de fichier non supporté 5')
    } else if (typeof req.body.download !== 'undefined' && req.body.download) {
      console.log('Téléchargement')
      genericFunctions.resDownload(req, res, originalFile, newFile)
    } else {
      console.log('Envoi du lien')
      genericFunctions.resLink(req, res, originalFile, newFile)
    }
  })
}

Итак, я пытаюсь остановиться с помощью childProcess.kill (), но я все еще получил другую строку из stderr, поэтому он переустанавливает заголовки и сбой приложения

...