常见的webhook风格API实践是让API使用者接收webhook请求,使用204 No Content响应,关闭连接,然后处理请求。 Hapi.js直到nextTick才发送回复对象,这意味着处理函数必须返回。
将请求处理分离为单独的函数并使用nextTick调用它仍然会导致在发送回复对象之前进行处理。 setTimeout有效,但这会对性能产生负面影响。
Hapi的请求扩展似乎是一个选项,但无论路径如何都附加到所有请求,这会给其他请求增加不必要的开销。
Express.js有一个立即发送响应的response.send()方法。理想情况下,Hapi会有类似的东西。
答案 0 :(得分:0)
解决方案是使用setImmediate
进行响应发送和连接关闭后应发生的任何处理。 Hapi在reply
上发送了nextTick
。 setImmediate
事件后将处理nextTick
个事件。
参见示例:https://gist.github.com/jeremiahlee/3689e8b4d1513c375b1e
答案 1 :(得分:-1)
(...)表示处理函数必须返回。
你确定吗?你有没有试过回复()。代码(204);在处理程序的开头,处理程序的逻辑之前?
server.route({
method: '...',
path: '...',
handler: function(request, reply){
reply().code(204);
// All the logic here...
}
});