Аполлон: вы вызываете concat для завершающей ссылки, которая не будет иметь никакого эффекта

Я работаю в проекте Apollo, GraphQL и Nuxtjs, при настройке конфигурации Apollo я получил следующее предупреждение:

link.js:38 Error: You are calling concat on a terminating link, which will have no effect
at new LinkError (linkUtils.js:41)
at concat (link.js:38)
at ApolloLink.webpackJsonp../node_modules/apollo-link/lib/link.js.ApolloLink.concat (link.js:65)
at link.js:13
at Array.reduce (<anonymous>)
at from (link.js:13)
at createApolloClient (index.js:58)
at webpackJsonp../.nuxt/apollo-module.js.__webpack_exports__.a (apollo-module.js:66)
at _callee2$ (index.js:140)
at tryCatch (runtime.js:62)

Вот мой код:

import { InMemoryCache } from 'apollo-cache-inmemory';
import { createHttpLink } from 'apollo-link-http';
import { ApolloLink } from 'apollo-link';

export default ({ store, env  }) => {
  const httpLink = new createHttpLink({ uri: env.GRAPH_BASE_URL });

  // middleware
  const middlewareLink = new ApolloLink((operation, forward) => {
    const token = store.getters['user/GET_TOKEN'];

    if (token) {
      operation.setContext({
        headers: { authorization: `Bearer ${token}` }
      });
    }

    return forward(operation);
  });

  const link = middlewareLink.concat(httpLink);

  return {
    link,
    cache: new InMemoryCache()
  }
};

Я искал в Google любую подобную проблему, я нашел эту https://github.com/Akryum/vue-cli-plugin-apollo/issues/47 но мне это не помогло. Я пытался изменить:

const link = middlewareLink.concat(httpLink);

к:

const link = Apollo.from([middlewareLink, httpLink]);

но он по-прежнему дает мне то же предупреждение, любая помощь, пожалуйста

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
17
1
9 437
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я заметил, что в файле readme vue-apollo есть некоторые документы для конфигураций apolloClient, в которых говорится, что вы можете отключить defaultHttpLink, чтобы использовать завершающие ссылки.

return {
  link,
  cache: new InMemoryCache()
  defaultHttpLink: false, // this should do the trick
}

все еще сталкивается с этой проблемой.

Kamal Alhomsi 30.10.2018 09:08

вы смогли это исправить? У меня все еще та же проблема

Adewale Olaoye 13.10.2020 13:33

В моем случае я решил проблему, изменив порядок в массиве, например:

Перед:

const links = [...middlewares, localLink, authLink, httpLink, errorLink]

После:

const links = [...middlewares, localLink, authLink, errorLink, httpLink]

у меня сработал этот порядок: ApolloLink.from ([errorLink, middlewareLink, httpLink]);

Jirik 09.08.2019 17:27
Ответ принят как подходящий

Решение для меня - поместить Http Link в конец массива Apollo Link (используется при создании клиента Apollo).

...
const param = {
  link: ApolloLink.from([
    onError(...) =>...,
    authLink...,
    new HttpLink({
      uri: '/graphql',
      credentials: 'same-origin'
    })
  ]),
  cache: ...,
  connectToDevTools: ...
}

new ApolloClient(param);

Я использую эти библиотеки:

  • apollo-client
  • apollo-cache-inmemory
  • apollo-link
  • apollo-link-http
  • apollo-link-context
  • apollo-link-error

Спасибо, я решил так же !, но я забыл поставить ответ, спасибо, что разместили это.

Kamal Alhomsi 13.11.2019 20:45

А как насчет WebSocketLink? Если вы хотите иметь и http: //, и ws: // ссылки, какая из них будет последней? И http, и ws являются закрывающими ссылками. Не могу понять этого.

Aurinxki 09.06.2021 18:52

Httplink должен быть концом массива ссылок.

Другие вопросы по теме