Axios is caching somehow my get user request react native
我正在使用Axios
但是从我的React Native应用程序中,每当我执行get请求并传递相同的承载令牌时,我都会得到我作为响应登录的最后一个用户。
这是我发送请求的方式:
1 2 3 4 5 6 7 8 9 10 | getUserByToken: function(token) { var headers = [ { key: 'Authorization', value: 'Bearer ' + token}, { key: 'Content-Type', value: 'application/x-www-form-urlencoded'}, { key: 'Cache-Control', value: 'no-cache'} ]; setHeaders('get', headers); return AxiosInstance.get('/user'); }, |
setHeaders方法用于设置请求的标头,我将所有http方法重置为一个空对象,并为以下请求设置正确的键值。
1 2 3 4 5 6 7 8 9 10 | export const setHeaders = (type, props) => { AxiosInstance.interceptors.request.use(config => { config.headers[type] = {}; props.forEach((prop) => { config.headers[type][prop.key] = prop.value; }); return config; }); } |
如您所见,我什至尝试使用Cache-Control:无缓存,但仍然无缘无故地保持缓存。
这就是我从
调用此函数的方式
1 2 3 4 5 6 7 8 9 10 11 | UserServices.getUserByToken(loginData.access_token) .then(userResponse => { // here userResponse is the previous user! // even though i'm passing the correct token this.props.onSetUserInfo(userResponse.data); this.setState({ loading: false }, () => { startMainTabs(); }); }); |
为什么会这样?
谢谢。
问题似乎是在实际设置标头之前已发送请求。原因是
它是可修复的,但使
进行解析
1 2 3 4 5 6 7 8 9 10 11 | export const setHeaders = (type, props) => { return new Promise(resolve => { AxiosInstance.interceptors.request.use(config => { config.headers[type] = {}; props.forEach((prop) => { config.headers[type][prop.key] = prop.value; }); return resolve(config); }); }); } |
然后在
中
1 2 3 4 5 6 7 8 9 10 | getUserByToken: async function (token) { var headers = [ { key: 'Authorization', value: 'Bearer ' + token}, { key: 'Content-Type', value: 'application/x-www-form-urlencoded'}, { key: 'Cache-Control', value: 'no-cache'} ]; await setHeaders('get', headers); return AxiosInstance.get('/user'); } |
请检查以下代码,我已经在我的项目中对其进行过测试,并且可以正常工作。
1 2 3 4 5 6 7 8 9 10 | getUserByToken: function(token) { var headers = [ { key: 'Authorization', value: 'Bearer ' + token}, { key: 'Content-Type', value: 'application/x-www-form-urlencoded'}, { key: 'Cache-Control', value: 'no-store'} ]; setHeaders('get', headers); return AxiosInstance.get('/user'); }, |
使用与上面相同的代码,它将解决您的问题。