如何以与@nuxt/apollo subscribeToMore 一起使用的方式设置我的 nuxt

Posted

技术标签:

【中文标题】如何以与@nuxt/apollo subscribeToMore 一起使用的方式设置我的 nuxt【英文标题】:How do I setup my nuxt in a way that with @nuxt/apollo subscribeToMore works 【发布时间】:2021-08-15 17:48:18 【问题描述】:

在我们的 nuxt 项目中使用 @nuxt/apollo 时。由于某种原因,我不断得到

期待一个已解析的 GraphQL 文档。也许您需要将查询字符串包装在“gql”标签中? http://docs.apollostack.com/apollo-client/core.html#gql

作为来自 Nuxt 的错误消息。 我使用以下语法:

apollo: 
  items: 
    $subscribeToMore: 
        // below is the subscription query.
        document: gql`
         subscription($Group: String!)
           agents(Group: $Group)
             _id
             name
            
           
        `,
        variables () 
          return 
            Group: Object.keys(this.$auth.user.app_access)[0],
          
        ,
        updateQuery: (previousResult,  subscriptionData ) => 
          console.log(subscriptionData);
          return subscriptionData.data; 
        
      ,
   
,

我的 apollo 配置如下所示:

module.exports = function (ctx) 
  const httpEndpoint = ctx.route.path.includes('/app/cmb') ? process.env.GRAPHQL_HTTP_ENDPOINT : process.env.GRAPHQL_HTTP_ENDPOINT_IAM
  const wsEndpoint = ctx.route.path.includes('/app/cmb') ? process.env.GRAPHQL_WS_ENDPOINT : process.env.GRAPHQL_WS_ENDPOINT_IAM
  return 
    httpEndpoint,
    wsEndpoint,
    tokenName: 'auth._token.keycloak',
    inMemoryCacheOptions: 
      addTypename: false,
    ,
    fetchOptions:  mode: 'no-cors' ,
    authenticationType: 'Bearer',
    getAuth: (tokenName) => 
      if (process.client) 
        return localStorage.getItem(tokenName)
       else 
        // get token from cookie in server side request
        return this.__VUE_s-s-r_CONTEXT__.req.headers.cookie.split('; ').reduce((acc, item) => 
          const split = item.split('=')

          if (split[0] === tokenName) 
            acc = decodeURIComponent(split[1]) // decode cookie value
          

          return acc
        , '')
      
    ,
    credentials: 'include'
  

在 nuxt.config 我有以下内容:

apollo: 
    clientConfigs: 
      default: '~/apollo.config.js'
    ,
    authenticationType: 'Bearer',
    tokenName: 'auth._token.keycloak'
  ,

package.json 中的 nuxt apollo:"@nuxtjs/apollo": "^4.0.1-rc.5",

有人可以告诉我如何设置正确的方式来进行多个订阅。只有一个订阅可以正常工作,但是当我想使用 subscribeToMore 添加多个订阅时,事情就会变得混乱。

【问题讨论】:

抱歉,这不是问题所在。我已经这样做了。 【参考方案1】:

您是否导入了gql

import gql from 'graphql-tag'

如 vue-apollo 文档中所示:https://apollo.vuejs.org/guide/apollo/queries.html#simple-query

【讨论】:

我做到了。这不是问题。

以上是关于如何以与@nuxt/apollo subscribeToMore 一起使用的方式设置我的 nuxt的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Apollo 在 Nuxt 生成的动态页面中正确填充页眉?

Nuxt + GraphQL (Apollo) 上传文件

Nuxt / Apollo - 设置授权标头

可以结合 apollo 查询(在 nuxt 内?)

为啥将 Apollo 与 Nuxt 一起使用需要 graphql-tag?

如何配置我的 Nuxt 前端应用程序以了解使用 Strapi 的后端的 baseUrl?