【问题标题】:Axios interceptor use express req objectaxios 拦截器使用 express req 对象
【发布时间】:2020-07-11 15:19:57
【问题描述】:

我有一个快速路由,我从前端发送一个标头,在这个路由中我使用 axios 发出一个 GET 请求。我用 axios 创建了一个拦截器,但我希望能够从激活的路由中读取 req 对象,以便将标头添加到 axios GET 调用中。

// Example Interceptor
axios.interceptors.request.use(
  config => {
    // How to get req.headers from the route here?
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

// Exemple GET route
router.get('/get', async (req, res, next) => {
  try {
    const { data } = await axios.get('https://kjhf.fsadjhfewq.....');
  } catch (error) {
    console.log(error)
  }

  res.status(200).json({});
});

可以这样做吗?

【问题讨论】:

    标签: express axios interceptor


    【解决方案1】:

    所以我认为这样做的方法是使用中间件来设置标题,并传递 axios 实例

    // apiSetHeader.js middleware
    exports.default = (req, res, next) => {
      req.CustomAxios = axios.create({
        headers: { 'HeaderForTheApi': req.headers.apiHeader'}
      })
      next()
    }
    
    

    然后在你的路线中使用它

    // Exemple GET route
    router.get('/get', apiSetHeaderMiddleware, async (req, res, next) => {
      try {
        const { data } = await req.CustomAxios.get('https://kjhf.fsadjhfewq.....');
      } catch (error) {
        console.log(error)
      }
      res.status(200).json({});
    });
    

    希望这会有所帮助!

    【讨论】:

    • 我希望在拦截器中能够访问 /get 路由的 req 对象,或者至少一些元素,如 req.headers、req.params 等。
    • 但重点是阅读它并记录它或其他东西,还是添加它?
    • 是的,我想在拦截器中读取,以便在axios请求中自动添加header
    • 而 config.headers 不包含您要查找的标头?
    • 那么您想将一个请求的标头添加到另一个请求吗?
    猜你喜欢
    • 2019-06-26
    • 2019-03-15
    • 2017-01-12
    • 1970-01-01
    • 2018-11-27
    • 2022-11-09
    • 2023-04-06
    • 2021-05-10
    • 1970-01-01
    相关资源
    最近更新 更多