Express Request Post-Processing



我在express的文档中找不到任何东西,但有没有请求后处理之类的东西?我使用的是使用passport的自定义令牌身份验证方案,我希望能够在发出请求后自动更新响应标头中的令牌,主要是用于身份验证的哈希时间戳。出于讨论目的,假设我希望在每次请求后执行以下函数:

function requestPostProcess(req, res){
if (res.status == 200)
{
res.token = updateToken();
}
}

理想情况下,我希望能够做到这一点,而不必在每条路由中调用next()。这可能吗?

如果您想将令牌添加到响应中,

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"。

优点:你有一个发送响应的网关,你可以在该函数中做额外的事情,比如编码、添加更多的头等,所有这些响应修改的事情都发生在一个地方。

最新更新