NodeJS + Axios实例+在请求之间缓存

时间:2018-03-27 11:55:28

标签: node.js vue.js axios

当前设置是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实例?

如果你需要更多信息,我试着尽可能地解释它。

0 个答案:

没有答案