如何让reqHeaders的UUID属性每次调用getQueryData时都执行createToken()
根因
模块顶层定义的reqHeaders对象会在模块首次加载时完成初始化,对象属性UUID对应的createToken()仅会在初始化阶段执行一次,后续所有getQueryData调用引用的都是已经固化了UUID值的同一个reqHeaders对象,因此不会触发新的token生成。
修复方案
直接将请求头的生成逻辑移入getQueryData函数内部,每次调用函数时都会重新生成请求头、执行createToken()获取最新UUID:
const createToken = () => { // some logics... return `${token}`; }; const getQueryData = query => { // 每次调用生成全新请求头 const reqHeaders = { UUID: createToken(), "Content-Type": "application/json;charset=UTF-8" }; return axiosInstance .post("/someAddress", { selectQuery: query }, { headers: reqHeaders }) .then(response => { // some logs... return response.data; }) .catch(error => { // some logs.... return error; }); }; module.exports = getQueryData;
如果存在多个请求函数共用请求头的场景,可以将请求头封装为生成函数,避免重复代码:
const createToken = () => { // some logics... return `${token}`; }; // 公共请求头生成函数 const generateReqHeaders = () => ({ UUID: createToken(), "Content-Type": "application/json;charset=UTF-8" }); const getQueryData = query => { return axiosInstance .post("/someAddress", { selectQuery: query }, { headers: generateReqHeaders() }) .then(response => { // some logs... return response.data; }) .catch(error => { // some logs.... return error; }); }; module.exports = getQueryData;
内容的提问来源于stack exchange,提问作者Kapuya
相关产品推荐
相关产品推荐

