根据express会话中存储的值将Axios Header设置为Java后端

63lcw9qa  于 2023-10-18  发布在  iOS
关注(0)|答案(1)|浏览(94)

我有一个node.js express(服务器端渲染)前端应用程序,可以调用java后端端点。我使用Axios来调用Java端点。我需要在express向java发出的每个请求中设置一个名为“agent-id”的头,该头的值来自express会话(req.session)。
我的Axios代码在另一个模块上。我正在导入该模块并调用我的API。
目前我的Axios模块代码是这样设置的:

const axiosClient = axios.create({
 baseURL: '...',
 httpsAgent: null,
 proxy: false,
 timeout: 60000,
});

axiosClient.interceptors.request.use(request => {
 console.log(`Starting:${request.baseURL}${request.url}`);

 // HOW DO I SET HEADER FROM EXPRESS SESSION HERE //

 return request;
}, error => Promise.reject(error));

axiosClient.interceptors.response.use(response => {
 console.log(`Received from:${response.config.baseURL}${response.config.url}`);
 return response;
}, error => Promise.reject(error));

module.exports = axiosClient;

我从frontend express app调用API如下:

import api from 'my-api-module';

const { data = {} } = await api.someName();

我所尝试的

我尝试使用app.use中间件更新req.headers,但在axios拦截器中找不到该头文件。
理想情况下,我不想通过在每个现有的API调用上传递req obj来改变整个API调用结构,那么我是否可以为每个Java请求使用express session值全局设置头部呢?

ep6jt1vc

ep6jt1vc1#

经过大量的挖掘,我发现没有简单的方法来进行全局更改,所以我不得不在每个API调用时手动发送头。

import api from 'my-api-module';

const { data = {} } = await api.someName({
  headers: {
    'custom-header': 'value'
  }
});

在拦截机上,我做到了:

axiosClient.interceptors.request.use(request => {
 console.log(`Starting:${request.baseURL}${request.url}`);

  if (request?.data?.headers) {
    request.headers = { ...request.headers, ...request.data.headers }
    delete request.data.headers;
  }

 return request;
}, error => Promise.reject(error));

PS:不是最好的解决方案,但我计划完全重写Axios模块,使其更加模块化

相关问题