Hapi服务日志问题:如何在响应前记录入站请求?
在Hapi服务器中响应前记录请求的解决方案
没问题,你需要的是在请求刚到达服务器、还没开始处理响应的时候就记录,Hapi正好提供了对应的事件来实现这个需求——onRequest 事件,它会在请求进入服务器处理流程的最早期触发,完全符合你的响应前记录的要求。
具体实现代码
你可以把记录逻辑绑定到onRequest事件上,示例代码如下:
server.on('onRequest', (request, h) => { // 这里就是响应前的记录逻辑,此时还没开始处理请求生成响应 console.log(`${request.info.remoteAddress}: ${request.method.toUpperCase()} ${request.url.path} [请求已到达]`); // 别忘了调用h.continue()让请求继续往下处理,否则请求会被挂起 return h.continue(); });
关键说明
onRequest事件的回调函数接收两个参数:request(请求对象,包含所有请求相关信息)和h(响应工具对象)。- 必须调用
h.continue()来让请求继续流转到后续的路由处理逻辑,否则请求会被终止在这里。 - 如果你需要记录更多请求细节,比如请求头、查询参数等,都可以从
request对象里获取,比如request.headers、request.query。
对比你之前用的response事件,它是在响应已经生成并准备发送给客户端时触发的,所以确实只能做到响应后记录。而onRequest完美填补了响应前记录的需求。
内容的提问来源于stack exchange,提问作者gibson
相关产品推荐
相关产品推荐

