【发布时间】:2016-08-26 08:10:56
【问题描述】:
我们有一个代码库(React.js 和 Hapi.js)。基于该代码库,我们有两个版本的应用程序。 一个是普通的Web应用,一个是Nodewebkit(Desktop)版本:
- nw.js v0.12.3
- io.js v1.2.0
- 铬 41.0.2272.76
应用程序基本相同,略有不同。比如网页版有用户(登录)管理,而桌面版没有。网页版使用 MySQL,桌面版使用 Sqlite。还有更多区别,但与问题无关:)
我们面临的问题是如何为 Nodewebkit 版本制作合适的记录器。在网页版中,我们为 Hapi.js 实现了 Good-console。它是这样的:
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,另一个用于正常的 web 启动。
如果我们在 NW.js 启动文件中使用 Good-console 初始化代码(适用于 Web 版本),则不会发生任何事情。服务器没有启动,也没有错误。 由于 NW.js 引擎没有运行 ECMA6,我已将良好控制台使用的节点模块转换为 ECMA5,但再次没有任何反应。
之前,我们已经为 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 :).');
});
});
技巧是如何使用相同的记录器调用,而无需在代码中使用 'if' 或类似技巧来干扰代码。澄清问题:
好的控制台代码:
request.server.log(['error'], err.stack);
request.server.log(['error'], err.stack);
log4js 代码:
logger.info('Nodeweb kit Fun is Started :).');
是否有可能将 log4js 函数附加到 request.server(当 NW 版本启动时),所以代码不知道登录工具?
或者其他一些想法非常感谢。
【问题讨论】:
标签: javascript node.js node-webkit hapijs