一定很简单,但我找不到一个好的解决方案。
在节点模块中,例如我想记录出错的地方。所以我需要使用Hapi函数server.log(...)。一个例子:
在server.js中:
const server = new Hapi.Server({...});
server.connection({port:3000});
server.start((err) => {
if (err) { throw err }
}
在文件test.js中,我想使用server.js中创建的服务器变量。它应该可以在任何模块中使用,因为记录和加载其他插件。
class Test {
logInfo(text) {
server.log(['info'], text); // this will not work.
}
}
module.exports = new Test();
我可以将服务器添加到模块的每次调用中,但那可能是一种过度杀伤。
如何在创建模块之外获得对服务器变量的引用?
答案 0 :(得分:0)
如果您想在请求期间记录消息,可以使用request.log(...)
。
或者,您可以通过访问处理程序中server
对象上的request
对象来使用server.log(...)
。
{
method: 'GET',
path: '/do/stuff',
handler: function (request, reply) {
request.server.log('server.log() method');
request.log('request.log() method');
const test = new Test(request.server);
test.logInfo('some text here');
}
}
也可以在hapi中查看我的answer on logging。
在您的情况下,如果您特别想要将消息记录为hapi服务器事件,则需要将对服务器对象的引用传递给模块。
class Test {
private server;
constructor(server) {
this.server = server;
}
logInfo(text) {
this.server.log(['info'], text); // this will work.
}
}
但是你的问题的评论者可能是对的。如果要避免模块的紧密耦合,则应避免使用此模式。