Чтобы выполнить sh, нам нужен доступ к коду, который запускается каждый раз, когда происходит fetch
. Этот код находится внутри HttpLink вашего клиента Apollo. В то время как модуль @nuxtjs/apollo
дает нам много опций, мы не можем настроить это на таком высоком уровне.
Шаг 1. Создание клиентского плагина
Как отмечено в разделе установки документации модуля Apollo, мы можем указать путь к плагину, который определит clientConfig
:
// nuxt.config.js
{
apollo: {
clientConfigs: {
default: '~/plugins/apollo-client.js'
}
}
}
Этот плагин должен экспортировать функцию, которая получает контекст nuxt . Он должен вернуть конфигурацию, которая будет передана утилите vue-cli-plugin-apollo
createApolloClient
. Вам не нужно беспокоиться об этом файле, но именно так @nuxtjs/apollo
создает клиента внутри.
Шаг 2: Создание пользовательских httpLink
В опциях createApolloClient
мы видим, что мы можем отключить defaultHttpLink
и вместо этого предоставить наш собственный link
. link
должен быть выходом официальной утилиты Apollo createHttpLink
, документы для которой можно найти здесь . Опция, которая нас больше всего интересует, это опция fetch
, которая в качестве состояния документов представляет собой
a fetch
совместимый API для выполнения запроса
This сводится к значению функции, которая принимает параметры uri
и options
и возвращает Promise
, который представляет сетевое взаимодействие.
Шаг 3. Создание пользовательского метода fetch
Как указано выше, нам нужна функция, которая принимает uri
и options
и возвращает обещание. Эта функция будет простым переходом к стандартному методу fetch
(вам может понадобиться добавить isomorphic-fetch
к вашим зависимостям и импортировать его здесь в зависимости от ваших настроек).
Мы извлечем вашего повара ie так же, как вы делали в своем вопросе, а затем установите его в качестве заголовка. Функция выборки должна выглядеть следующим образом:
(uri, options) => {
const token = Cookies.get('XSRF-TOKEN')
options.headers['X-XSRF-TOKEN'] = token
return fetch(uri, options)
}
Собрать все вместе
В конечном итоге ваш файл ~/plugins/apollo-client.js
должен выглядеть примерно так:
import { createHttpLink } from 'apollo-link-http'
import fetch from 'isomorphic-fetch'
export default function(context) {
return {
defaultHttpLink: false,
link: createHttpLink({
uri: '/graphql',
credentials: 'include',
fetch: (uri, options) => {
const token = Cookies.get('XSRF-TOKEN')
options.headers['X-XSRF-TOKEN'] = token
return fetch(uri, options)
}
})
}
}