nuxt. js - Как кэшировать вызов ax ios на стороне сервера для всех клиентов - PullRequest
0 голосов
/ 03 февраля 2020

Я использую приложение vue + nuxt. js, мне хотелось бы знать, можно ли кэшировать вызов веб-службы axe ios для всех клиентов. Я должен получить некоторые справочные данные по валюте, и это не имеет большого смысла, что каждый клиент должен вызывать эти данные.

Может кто-нибудь дать мне несколько советов или даже пример? Спасибо.

1 Ответ

0 голосов
/ 19 марта 2020

Вот рабочее решение с последней версией Nuxt 2.11, использующее локально определенный модуль.

Сначала добавьте локальный модуль в nuxt.config. js

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

Затем

//  modules/axCache.js
import LRU from "lru-cache"

export default function(_moduleOptions) {
  const ONE_HOUR = 1000 * 60 * 60
  const axCache = new LRU({ maxAge: ONE_HOUR })

  this.nuxt.hook("vue-renderer:ssr:prepareContext", ssrContext => {
    ssrContext.$axCache = axCache
  })
}

и

// plugins/axios.js
import { cacheAdapterEnhancer } from "axios-extensions"
import LRU from "lru-cache"
const ONE_HOUR = 1000 * 60 * 60

export default function({ $axios, ssrContext }) {
  const defaultCache = process.server
    ? ssrContext.$axCache
    : new LRU({ maxAge: ONE_HOUR })

  const defaults = $axios.defaults
  // https://github.com/kuitos/axios-extensions
  defaults.adapter = cacheAdapterEnhancer(defaults.adapter, {
    enabledByDefault: false,
    cacheFlag: "useCache",
    defaultCache
  })
}

Обратите внимание, что это работает как на стороне сервера / клиента, так и может быть настроено для работы только на одной стороне.

решение найдено на: https://github.com/nuxt-community/axios-module/issues/99

...