2016-08-26 5 views
1

У нас есть одна база кода (React.js и Hapi.js). Основываясь на этой базе кода, у нас есть две версии приложения. Одним из них является просто обычный веб-приложение, другой является Nodewebkit (Desktop) версия:Использование регистратора в среде Nodewebkit

  • nw.js v0.12.3
  • io.js v1.2.0
  • Chromium 41.0.2272.76

По существу приложения одинаковы, с небольшими различиями. Например, веб-версия имеет пользовательское (вход в систему) управление, в то время как на рабочем столе нет. Web verison использует MySQL, в то время как настольная версия использует Sqlite. Есть больше различий, но это не относится к вопросу :)

Проблема, с которой мы сталкиваемся, - это сделать правильный регистратор для версии Nodewebkit. В веб-версии мы внедрили Good-console для Hapi.js. Это звучит примерно так:

var options = { 
ops: { 
    interval: 1000 
}, 
reporters: config.loggers 
}; 

models.sequelize.sync(/*{force: true}*/).then(function(){ 
server.register({ 
register: require('good'), 
options: options 
}, (err) =>{ 

if(err) { 
    console.error(err); 
} else { 
    server.start(() =>{ 
    console.info('Server started at ' + server.info.uri); 
    }); 
} 
}); 

А позже в коде используется как:

}).catch(function (err) { 
      request.server.log(['error'], err.stack); 
      response({isError: true, message: 'Could not retrieve connection information'}).code(200); 
     }); 

Это работает так же, как ожидалось.

Проблема, с которой мы сталкиваемся, заключается в том, как включить один и тот же механизм ведения журнала в среду Nodewebkit. Обычно, поскольку мы используем одну и ту же базовую базу, вызовы журналов должны быть одинаковыми. Все файлы в приложении одинаковы, кроме index.js. У нас есть две версии: одна для запуска NW.js и еще одна для обычного веб-запуска.

Если в стартовом файле NW.js используется код инициализации Good-console (который работает в веб-версии), ничего не происходит. Сервер не запущен, и ошибок нет. Я передал узловые модули, используемые хорошей консолью для ECMA5, так как двигатель NW.js не работает ECMA6, но опять ничего не происходит.

Раньше мы реализовали простой регистратор для версии NW.js. Который был использован только во время запуска, и это идет что-то вроде этого:

log4js = require('log4js'); 
log4js.configure({ 
appenders: [ 
    { type: 'console' }, 
    { type: 'file', filename: 'logs/project.log', category: 'projects' }   
    ] 
}); 

logger = log4js.getLogger('projects'); 
logger.setLevel('ERROR'); 
logger.setLevel('INFO'); 

server.route(require('./server/config/routes')); 
models.sequelize.sync({/*force: true*/}).then(function() { 
server.start(function() { 
    logger.info('Nodeweb kit Fun is Started :).'); 
}); 
}); 

Хитрости заключается в том, как использовать те же вызовы регистратора, без infesintg кода с «если» или подобными трюками в коде. Чтобы прояснить этот вопрос:

Хороший код консоли:

request.server.log(['error'], err.stack); 
request.server.log(['error'], err.stack); 

log4js код:

logger.info('Nodeweb kit Fun is Started :).'); 

Есть ли возможность присоединения (при запуске версии NW) log4js функции запроса. сервер, поэтому код не знает об объекте loggin?

Или какая-либо другая идея очень ценится.

ответ

-1

Мне удалось использовать тот же код для регистрации в обеих версиях. Просто в версии NW я установил плагин hapi-logger.

Оба плагина использовать ту же сигнатуру Сейчас:

request.server.log(['error'], err.stack);