在 Hapi.js 中处理 Webhook API 的最佳方式是什么?

What is the best way to handle webhook APIs in Hapi.js?

一种常见的 webhook 风格 API 做法是 API 消费者接收 webhook 请求,以 204 No Content 响应,关闭连接,然后处理请求。 Hapi.js 直到 nextTick 才发送回复对象,这意味着处理函数必须 return.

将请求处理分离到一个单独的函数中并使用 nextTick 调用它仍然会导致在发送回复对象之前进行处理。 setTimeout 有效,但这对性能有负面影响。

Hapi 的请求扩展似乎是一个选项,但它附加到所有请求,而不考虑路径,这给其他请求增加了不必要的开销。

Express.js 有一个 response.send() 方法可以立即发送响应。理想情况下,Hapi 应该有这样的东西。

解决方案是使用 setImmediate 进行响应发送和连接关闭后应该发生的任何处理。 Hapi 在 nextTick 上发送 replysetImmediate 个事件将在 nextTick 个事件之后处理。

参见示例:https://gist.github.com/jeremiahlee/3689e8b4d1513c375b1e