Apollo:您正在终止链接上调用 concat,这将不起作用

Kam*_*msi 18 apollo graphql

我在 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)
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

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)
Run Code Online (Sandbox Code Playgroud)

我在谷歌上搜索了任何类似的问题,我发现了这个https://github.com/Akryum/vue-cli-plugin-apollo/issues/47 但它没有帮助我。我试图改变:

const link = middlewareLink.concat(httpLink);
Run Code Online (Sandbox Code Playgroud)

到:

const link = Apollo.from([middlewareLink, httpLink]);
Run Code Online (Sandbox Code Playgroud)

但它仍然给我同样的警告,请任何帮助

Gui*_*lem 33

我的解决方案是放在Http LinkApollo Link 数组的末尾(在创建 Apollo Client 时使用)。

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

new ApolloClient(param);
Run Code Online (Sandbox Code Playgroud)

我正在使用这些库:

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

  • WebSocketLink 怎么样?如果您想要同时拥有 http:// 和 ws:// 链接,哪一个会放在最后?http和ws都是终止链接。这个想不通啊 (2认同)
  • @phainix,我最终用 wsLink 替换了 httpLink。我发现两者都终止文档中的链接(https://www.apollographql.com/docs/react/api/link/apollo-link-ws/,https://www.apollographql.com/docs/react/ api/link/apollo-link-http/)。初始化客户端时,首先必须将 errorlink 和 uploadLink errorLink.concat(uploadLink) 链接到 const 中。然后链接:from([ chainedLink, wsLink ]), (2认同)

小智 13

就我而言,我解决了这个问题,更改了数组中的顺序,例如:

前:

const links = [...middlewares, localLink, authLink, httpLink, errorLink]
Run Code Online (Sandbox Code Playgroud)

后:

const links = [...middlewares, localLink, authLink, errorLink, httpLink]
Run Code Online (Sandbox Code Playgroud)


小智 5

我注意到在 vue-apollo 自述文件中有一些关于 apolloClient 配置的文档,它说您可以关闭 defaultHttpLink 以使用终止链接。

return {
  link,
  cache: new InMemoryCache()
  defaultHttpLink: false, // this should do the trick
}
Run Code Online (Sandbox Code Playgroud)