我无法在快递的文档中找到任何内容,但有请求后期处理吗?我正在使用使用护照的自定义令牌身份验证方案,我希望能够在发出请求后自动更新响应标头中的令牌,主要是用于身份验证的哈希时间戳。出于讨论目的,假设我希望在每个请求之后执行以下函数:
function requestPostProcess(req, res){
if (res.status == 200)
{
res.token = updateToken();
}
}
理想情况下,我希望能够在不必在每条路线中调用next()的情况下执行此操作。这甚至可能吗?
答案 0 :(得分:1)
如果要将令牌添加到回复中,
1)您可以创建一个中间件,在请求到来时以及处理之前立即添加令牌。把它放在请求处理程序之前。
实施例,
app.use(function(req, res, next){
res.token = updateToken();
next();
})
这里的故障是,令牌将带有所有响应,但这可能是你可以接受的,因为它是一个时间戳。此外,您甚至可以使用中间件处理错误,并在状态不是200时删除令牌。
优势:需要进行最少的更改,并且正确的错误处理效果很好。
缺点:它告诉收到请求的时间,而不是响应准备好的时间。
2)如果你想在完成过程之后放置响应,意味着响应准备就绪的时间,那么你可能需要创建一个发送回所有响应的效用函数,并且你总是调用该函数。该效用函数将检查状态并附加令牌。
function sendResponseGateway(req, res){
if (res.status == 200)
{
res.token = updateToken();
}
res.send()
}
现在,只要您准备好发送回复,就可以调用此功能。
缺点:函数需要在任何地方调用,你不会在任何地方写“res.send”。
优点:你有一个发送响应的网关,你可以做其他的东西,如编码,在该函数中添加更多的标题等,所有这些响应修改的东西都发生在一个地方。