当前设置是VueJS + SSR,但任何React JS解决方案也可能都有效。
我有一个名为axios.js的文件,我在其中创建一个新的axios实例并设置适当的授权标题。
import axios from 'axios'
axios.interceptors.request.use((config) => {
config.foo = 123;
});
const instance = axios.create();
instance.verylongunexistingattribute = new Date().toUTCString()
instance.interceptors.request.use((config) => {
config.foo = 456;
});
axios.get('/foo'); // config.foo === 123 -> true
instance.get('/foo'); // config.foo === 456 -> true
export { instance, createInstance, initializeApiV2 }
对我来说似乎很好,然后在我的文件中,我只是做了AJAX请求:
import axios from '@/src/api/axios'
let fetchUserProperties = () => {
console.log("axios:instance", axios.verylongunexistingattribute)
console.log("axios:instance.request", new Date().toUTCString())
return new Promise((resolve, reject) => {
axios.get(`/profile/properties`)
.then((result) => {
resolve(result.data)
})
.catch((error) => {
reject(error)
})
});
}
请记住,这在浏览器中非常完美,但在节点上却很糟糕。
为什么会失败:enter link description here
基本上,在axios.js中创建的实例正在被节点缓存,因此不同用户的后续请求最终会使用相同的实例。如果已经定义了带有令牌的requestInterceptor,那么它可能会向其他用户显示数据:(
我无法理解它,因为我不能只返回一个函数,每次调用它时都会创建一个新的axios实例。
如何创建仅适用于1个请求的axios实例?
如果你需要更多信息,我试着尽可能地解释它。