Создать новый объект () в блоке catch js

#javascript #node.js #express #ecmascript-6 #winston

#javascript #node.js #выразить #ecmascript-6 #уинстон

Вопрос:

 import express from 'express';
import route from './server/routes/route';
import cookieParser from 'cookie-parser';
import bodyParser from 'body-parser';
import favicon from 'serve-favicon';
import path from 'path';
import Logger from './server/logger/logger.js';

try {
  const app = express();
  app.use(bodyParser.json());
  app.use(bodyParser.urlencoded({extended: false}));
  app.use(cookieParser());
  app.use(favicon(path.join(__dirname, '/client/assets/favicon.ico')));
  app.use(express.static(path.join(__dirname, 'client')));
  app.use(route);
  app.listen(3000);
  new Logger().logInfo('Server started at port 3000');
} catch (e) {
  new Logger().logError(e);
  process.exit(1);
}

process.on('uncaughtException', function (err) {
  process.exit(1);
  new Logger().logError(err);
});
  

Здесь я пытаюсь создать экспресс-сервер. Я использовал блок try catch. Когда я удаляю import path from 'path' , генерируется ошибка и вызывается catch. Однако проблема new Logger().logError(e); не работает. предполагается, что ошибка регистрируется в определенном файле. Но ничего не происходит. Но если ошибки нет, значит logInfo() , все работает нормально. Я попытался войти в консоль, и это работает. Я использую babel, так что это проблема с этим?
Logger — это класс, который содержит реализацию winston logger и предоставляет методы LogError и logInfo.

Комментарии:

1. «Однако проблема new Logger().logError(e); не работает». Можете ли вы подробнее рассказать об этом?

2. отредактированный вопрос

3. Возможно, .logError() это не совсем синхронно и process.exit(1) прерывает его до того, как это будет сделано

4. я удалил process.exit(1) , а затем журнал сработал. Я попытался ввести process.exit(1) обратный вызов для logInfo(), но идентификатор не сработал.

Ответ №1:

Это известная ошибка в winston, и, похоже, они не собираются ее исправлять. Я использовал один из предложенных там обходных путей, и все работает нормально. Здесь

 this.winstonlogger.log('error', logMessage, () => {
  this.transports.file.on('flush', () => {
    process.exit(1);
  });
});