node.js - 通过 final方法发送所有路由

标签 node.js express

我正在使用 NodeJS 和 Express。 Express 支持中间件,这对于通过“预处理器”发送所有路由进行身份验证等非常方便。

是否有等效的后处理器?

我想更新所有响应的 token 。这样,当用户“工作”时,他们的身份验证就不会过期,因为我总是刷新它。

可能会有些困惑,所以我将添加一段示例代码:

router.get('/auth', [auth], async function({ user }, res) {

  …
  <<code to generate new token>>
  return res.header('Authentication', 'Basic ' + token).send(200);
});

因此,在每条路线的末尾,我想调用以下代码来更新 header :

  <<code to generate new token>>
  return res.header('Authentication', 'Basic ' + token).send(200);

[auth] 是中间件。我想知道是否有一个“终端软件”像中间件一样简单,可以在发送给用户之前发送所有响应,这样我就不必在每个路由中手动复制 token 生成和 header 代码。

谢谢

吉娜

最佳答案

您可以从路由处理程序中调用 next 回调来调用下一个中间件,如下所示

router.get('/auth', [auth], async function({ user }, res, next) {
    ...
    next()
});

app.use((req, res, next) => {
    <<code to generate new token>>
    res.header('Authentication', 'Basic ' + token).send(200);
})

或者这样

const addAuth = (req, res) => {
    <<code to generate new token>>
    res.header('Authentication', 'Basic ' + token).send(200);
}

router.get('/auth', [auth], async function({ user }, res, next) {
    ...
    next()
}, addAuth);

但是您必须小心,只能使用 res.send 函数一次,因为它会关闭响应流,但您可以使用 res.write/res .end.

关于node.js - 通过 final方法发送所有路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56434571/

相关文章:

node.js - 在函数内部导出 [nodejs]

javascript - 在 rimraf 包的帮助下使用 glob 删除 Node 中的所有子文件夹?

node.js - 如何使查询结果可从所有页面访问

javascript - Node JS 匿名函数和回调

javascript - 无法使用 JWT 读取 Express 上未定义的属性 'username'

javascript - 尝试使用 Mocha 测试时模型无法正确加载

javascript - 错误 [ERR_HTTP_HEADERS_SENT] : Cannot set headers after they are sent to the client in Node JS

node.js - 为什么我的 Heroku Express API 数据是持久的,即使它仅来自变量

node.js - 一个实例 - 一次一个请求 App Engine 灵活

javascript - 尝试使用 Node Express 发送 POST 响应,错误无效状态代码