快速请求后处理

时间:2015-04-26 13:11:31

标签: node.js rest authentication express passport.js

我无法在快递的文档中找到任何内容,但有请求后期处理吗?我正在使用使用护照的自定义令牌身份验证方案,我希望能够在发出请求后自动更新响应标头中的令牌,主要是用于身份验证的哈希时间戳。出于讨论目的,假设我希望在每个请求之后执行以下函数:

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

理想情况下,我希望能够在不必在每条路线中调用next()的情况下执行此操作。这甚至可能吗?

1 个答案:

答案 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”。

优点:你有一个发送响应的网关,你可以做其他的东西,如编码,在该函数中添加更多的标题等,所有这些响应修改的东西都发生在一个地方。