Vue.js nuxt.js-如何在服务器端缓存所有客户端的axios调用

Vue.js nuxt.js-如何在服务器端缓存所有客户端的axios调用,vue.js,caching,axios,nuxt.js,Vue.js,Caching,Axios,Nuxt.js,我使用的是vue+nuxt.js应用程序,我想知道是否可以缓存所有客户端的axios webservice调用。我必须获得一些货币参考数据,而每个客户都必须调用这些数据,这并没有多大意义 有人能给我一些提示,甚至举个例子吗?Thx 这里是最新Nuxt 2.11的工作解决方案,使用本地定义的模块 首先将本地模块添加到nuxt.config.js modules: [ "@/modules/axCache", ... ] 然后 及 注意,这适用于服务器/客户端,并且可以配置为仅在一侧工作 解

我使用的是vue+nuxt.js应用程序,我想知道是否可以缓存所有客户端的axios webservice调用。我必须获得一些货币参考数据,而每个客户都必须调用这些数据,这并没有多大意义


有人能给我一些提示,甚至举个例子吗?Thx

这里是最新Nuxt 2.11的工作解决方案,使用本地定义的模块

首先将本地模块添加到nuxt.config.js

modules: [
   "@/modules/axCache",
...
]
然后

注意,这适用于服务器/客户端,并且可以配置为仅在一侧工作


解决方案位于:

以下是缓存整个页面的新解决方案

如果需要,甚至可以缓存一致的api菜单

npm i numxt完美缓存

// nuxt.config.js

modules: [
    [
        'nuxt-perfect-cache',
        {
          disable: false,
          appendHost: true,
          ignoreConnectionErrors:false, //it's better to be true in production
          prefix: 'r-',
          url: 'redis://127.0.0.1:6379',
          getCacheData(route, context) {          
            if (route !== '/') {
              return false
            }
            return { key: 'my-home-page', expire: 60 * 60 }//1hour
          }
        }
      ]
]
然后在redis中为所有客户端缓存api响应:

asyncData(ctx) {
    return ctx.$cacheFetch({ key: 'myApiKey', expire: 60 * 2 }, () => {
      console.log('my callback called*******')
      return ctx.$axios.$get('https://jsonplaceholder.typicode.com/todos/1')
    })
  }

谢谢,如果在服务器模式下使用,这个缓存可以在客户端之间共享吗?还是每个客户端都会创建一个缓存?事实上,我发现了这一点,目前正在使用它。我还将axios与vuex结合使用,以将请求保持在最低限度。你添加了一个插件并安装了所需的依赖项,我不知道多个客户端共享同一个缓存是什么意思?你能解释一下吗?
// nuxt.config.js

modules: [
    [
        'nuxt-perfect-cache',
        {
          disable: false,
          appendHost: true,
          ignoreConnectionErrors:false, //it's better to be true in production
          prefix: 'r-',
          url: 'redis://127.0.0.1:6379',
          getCacheData(route, context) {          
            if (route !== '/') {
              return false
            }
            return { key: 'my-home-page', expire: 60 * 60 }//1hour
          }
        }
      ]
]
asyncData(ctx) {
    return ctx.$cacheFetch({ key: 'myApiKey', expire: 60 * 2 }, () => {
      console.log('my callback called*******')
      return ctx.$axios.$get('https://jsonplaceholder.typicode.com/todos/1')
    })
  }