Как вы ловите `Ошибка: ENOENT: нет такого файла или каталога` с winston? - PullRequest
0 голосов
/ 04 мая 2018

Я использую экспресс с Winston Logger. Я вижу ошибку Error: ENOENT: no such file or directory, когда Express пытается обработать файл, путь к которому не точен. Это ожидаемое поведение. Тем не менее, ошибка не регистрируется через Winston (и, следовательно, не попадает в мой слабый webhook). Он записывается в консоль узла, но не регистрируется моим Winston Logger. Я попытался обернуть .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;

1 Ответ

0 голосов
/ 04 мая 2018

Вместо того, чтобы пытаться / ловить, мне нужно было использовать функцию обратного вызова, которую 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;
...