Как вы поймаете `Ошибка: ENOENT: нет такого файла или каталога` с помощью Winston?

Я использую экспресс с Winston Logger. Я получаю сообщение об ошибке Error: ENOENT: no such file or directory, когда express пытается обработать файл, путь к которому неверен. Это ожидаемое поведение. Однако ошибка не регистрируется через Winston (и, следовательно, не переносится на мой слабый веб-перехватчик). Он записывается в консоль узла, но не обрабатывается моим регистратором Winston. Я попытался обернуть .sendFile() в try / catch, но это тоже не сработало.

const logger = require('winston');

const serveFile = ({ filePath, fileType }, res) => {
  logger.verbose(`serving file: ${filePath}`);
  const sendFileOptions = {
    headers: {
      'X-Content-Type-Options': 'nosniff',
      'Content-Type'          : fileType,
    },
  };
  try {
    res.status(200).sendFile(filePath, sendFileOptions);
  } catch (error) {
    logger.error(error);
  }
};

module.exports = serveFile;

person billbitt    schedule 04.05.2018    source источник


Ответы (1)


Вместо попытки / улова мне нужно было использовать функцию обратного вызова, которую sendFile() принимает в качестве третьего аргумента.

const logger = require('winston');

const serveFile = ({ filePath, fileType }, res) => {
  logger.verbose(`serving file: ${filePath}`);
  const sendFileOptions = {
    headers: {
      'X-Content-Type-Options': 'nosniff',
      'Content-Type'          : fileType,
    },
  };
  res.status(200).sendFile(filePath, sendFileOptions, (error) => {
    if (error) {
      logger.error(error);
    }
  });
};

module.exports = serveFile;
person billbitt    schedule 04.05.2018