【问题标题】:Set dynamic headers in axios from an ExpressJS app从 ExpressJS 应用程序在 axios 中设置动态标题
【发布时间】:2023-04-01 05:28:01
【问题描述】:

我有一个要求,我需要为每个 axios 请求设置一个 Request-Id 标头。此标头的值由另一个快速中间件动态生成。

现在我可以做:

axios.get(url, headers: {'Request-Id': req.requestId});

但是我想把这个抽象移到一个通用的地方,这样它就可以在任何地方重复使用。我想出了一个自定义的 express 中间件:

app.use(function (req, res, next) {
  req.fetch = axios;
  req.fetch.defaults.headers.common['Request-Id'] = req.requestId;
  next();
})

现在我可以在任何路由中使用req.fetch 而无需单独设置标题,但这是推荐的方法吗? 如果有人能解释这种方法是否有任何缺陷或更好的解决方案,将会很有帮助。

【问题讨论】:

  • 在 javascript 中,对象是通过引用传递的,您现在通过中间件对所有请求使用相同的对象 axios req.fetch.defaults.headers.common[ 'Request-Id'] 将设置为 axios 对象,该对象将被所有请求共同共享,因此您最终可能会将一个的 requsetId 用于另一个。
  • 是的。我会确保在其他地方只使用req.fetch。但是对于上面的问题陈述,我可以使用axios.create()来创建一个特定的实例,这样全局对象就不会被修改了。
  • 另外,我想知道 Express 中任何可能的竞争条件,这可能导致错误/陈旧的Request-Id 被传递给路由。

标签: javascript express axios


【解决方案1】:

这在我看来确实不错。

您也可以使用一些配置文件来让服务器使用或不使用您刚刚编写的中间件:)

也许其他人可能会告诉我们他们对此的看法

【讨论】:

  • 我想知道 Express 中任何可能的竞争条件,这可能会导致错误/陈旧的Request-Id 被传递给路由。是否会出现两个同时请求最终使用错误的Request-Ids 的情况?
  • 据我所知,不应该存在竞争条件,Express 应该可以很好地处理您的请求。至少,在您不超过 Express 可以处理的请求限制之前。
猜你喜欢
  • 2021-02-03
  • 2018-04-11
  • 2016-08-15
  • 2022-07-28
  • 2018-09-21
  • 2013-10-02
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多