Javascript axios拦截器:自定义标头仅添加到选项请求中
因此,我为axios设置了一个拦截器,并在请求中添加了一个自定义头。但是,当我签入服务器代码时。标题仅在Javascript axios拦截器:自定义标头仅添加到选项请求中,javascript,axios,Javascript,Axios,因此,我为axios设置了一个拦截器,并在请求中添加了一个自定义头。但是,当我签入服务器代码时。标题仅在选项请求中接收 class ChainInterceptors { constructor(config) { this.cleanConfig = { ...config }; } build() { return this.cleanConfig; } } export class ReqInterceptor extends ChainIntercept
选项
请求中接收
class ChainInterceptors {
constructor(config) {
this.cleanConfig = { ...config };
}
build() {
return this.cleanConfig;
}
}
export class ReqInterceptor extends ChainInterceptors {
constructor(config) {
super(config);
}
setLog() {
this.cleanConfig.headers['Respond-By'] = // some value;
return this;
}
}
我正在以以下方式实施:
export const request = {
init() {
const token = getItem('token');
const request = axios.create({
httpsAgent: new https.Agent({ keepAlive: true }),
baseURL: LOCAL_URL,
headers: {
authorization: `bearer ${token}`,
'Content-Type': 'application/json',
},
});
this.attachInterceptor(request);
return request;
},
attachInterceptor(request) {
request.interceptors.request.use(config => {
return new ReqInterceptor(config).setLog().build();
});
request.interceptors.response.use(
response => {
// response interceptors
},
error => {
// Do something with response error
return Promise.reject(error);
}
);
},
get() {
return this.init().get.apply(null, arguments);
},
// and other methods...
};
如上所述,
Respond By
标题仅出现在我的OPTIONS
请求中。非常感谢您的指导。我使用拦截器中的以下设置来传递令牌和当前语言。当前语言是自定义标题,我需要检测用户从客户端选择的当前语言
下面是config.headers[“lang”]=${lang}
是自定义标题
从服务器端,我通过httpContextAccessor.HttpContext.Request.Headers[“lang”]获得它
export function setupAxios(axios, store) {
axios.interceptors.request.use(
config => {
const {
auth: { authToken },
i18n: { lang }
} = store.getState();
// console.log("language => ", lang);
// console.log("setupAxios => ", store.getState());
if (authToken) {
config.headers.Authorization = `Bearer ${authToken}`;
config.headers["lang"] = `${lang}`;
}
store.dispatch(httpRequest.actions.startRequest(true));
return config;
},
err => {
store.dispatch(httpRequest.actions.endRequest(false));
return Promise.reject(err);
}
);
axios.interceptors.response.use(
response => {
store.dispatch(httpRequest.actions.endRequest(false));
return response;
},
err => {
store.dispatch(httpRequest.actions.endRequest(false));
return Promise.reject(err);
}
);
}