Впрыск синглтона на стороне сервера в Nuxt - PullRequest
0 голосов
/ 12 февраля 2020

Мне нужен экземпляр общего объекта (например, cache / logger / service) (singleton) на стороне сервера, доступный для промежуточного программного обеспечения SS / plugins / nuxtserverinit.

Я пробовал локальный модуль, который пытается внедрить $cache в серверный контекст во время render:done ловушки (см. ниже), но независимо от того, что я пробовал, он все еще не был доступен во время обработки запроса SS.

// modules/myCache.js
export default function(_moduleOptions,config) {

  this.nuxt.hook("render:before", context => {
     const cache=new myExoticCache()

// I tried all the below combinations
     context.nuxt.$cache1=cache
     context.serverContext.$cache2=cache
     context.options.$cache3=cache
     context.globals.$cache4=cache

  });

  this.nuxt.hook("render:done", context => {

// tried the above here too     

  });
}

// plugins/myplug.js
export default ({serverContext,nuxt}, inject) => {
//all of the below are undefined
//nuxt.$cache
//serverContext.$cache

}

Похоже, я что-то упустил. Было бы здорово узнать что. Как я могу передать значение из route:done ловушки на любую серверную сторону middleware/plugin/nuxtserverinit.

1 Ответ

1 голос
/ 15 февраля 2020

Вы можете расширить ssrContext из ловушки 'vue -renderer: ssr: prepareContext'.

// modules/myCache.js
export default function(_moduleOptions) {
    const $cache = 'CACHE';
    this.nuxt.hook('vue-renderer:ssr:prepareContext', ssrContext => {
        ssrContext.$cache = $cache;
    })
}

// plugins/myplug.js
export default function ({ ssrContext }) {
    if (process.server) {
        console.log(ssrContext.$cache)
    }
}
...