2016-10-18 3 views
0
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); 
}); 

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

+0

* «Однако проблема в том, что это« новый Logger(). LogError (e); 'не работает». * Можете ли вы рассказать об этом? –

+0

Вопрос отредактирован –

+1

Может быть, что '.logError()' не является полностью синхронным, а 'process.exit (1)' прерывает его до его завершения. – jfriend00

ответ

0

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

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