传递给解析器不是有效的 GraphQL DocumentNode。您可能需要使用“graphql-tag”或其他方法将您的操作转换为文档

Posted

技术标签:

【中文标题】传递给解析器不是有效的 GraphQL DocumentNode。您可能需要使用“graphql-tag”或其他方法将您的操作转换为文档【英文标题】:passed to parser was not a valid GraphQL DocumentNode.you may need to use 'graphql-tag' or another method to convert your operation into a document 【发布时间】:2018-11-11 13:44:36 【问题描述】:

我是 react-native、graphql 和 Aws AppSync 的新手。我们尝试使用 aws appsync 构建一个 react-native 应用程序。当我运行 react-native run-android 时,它会抛出一个错误提示

传递给解析器的不是有效的 GraphQL DocumentNode。您可能需要使用“graphql-tag”或其他方法将您的操作转换为文档

请看一下

https://i.stack.imgur.com/hr5fA.jpg

获取参考的图片网址。

 import  graphql, compose  from 'react-apollo';
import gql from 'graphql-tag';

 const listMessages = graphql(gql`
    query listMessages 
      listMessages 
        id
        text
        createdAt
        sentBy 
          id
          name
        
      
    `)
  const createMessage = graphql(gql`
  mutation createMessage($text: String!, $sentById: ID!) 
      createMessage(input : 
        id : $sentById
        text : $text
        createdAt : "1/06/2018"
        updateAt:"1/06/2018"
      )
       sentBy 
         id
         name
      
      
     `)


     export default compose(
        graphql(createMessage,
          options: 
            fetchPolicy: 'cache-and-network'
          
        , name : 'createMessageMutation'),
        graphql(listMessages, 
          options : 
            fetchPolicy: 'cache-and-network'
          
        , name: 'listMessagesQuery')
      )(Chat)

以上代码是graphql的基本实现。

我无法真正找出错误请帮助我。谢谢!提前

【问题讨论】:

【参考方案1】:

您调用了两次graphql 函数——一次在listMessagescreateMessage 的定义中,然后在您的导出语句中再次调用。您需要更改定义用于查询的变量的方式:

const createMessage = gql`
  mutation createMessage($text: String!, $sentById: ID!) 
    createMessage(input : 
      id : $sentById
      text : $text
      createdAt : "1/06/2018"
      updateAt:"1/06/2018"
    ) 
      sentBy 
        id
        name
      
    
 `

【讨论】:

【参考方案2】:

您只能使用 GQL 来定义您的查询。

你可以使用任何一个。

无需添加graphql。

import gql from 'graphql-tag';

const listMessages = gql
    query listMessages 
      listMessages 
        id
        text
        createdAt
        sentBy 
          id
          name
        
      
    

【讨论】:

以上是关于传递给解析器不是有效的 GraphQL DocumentNode。您可能需要使用“graphql-tag”或其他方法将您的操作转换为文档的主要内容,如果未能解决你的问题,请参考以下文章

Java GraphQL - 将字段值传递给对象的解析器

上下文未传递给嵌套的 Apollo GraphQL 解析器

无法将自定义结果从解析器传递到 Graphql

graphql-tools 突变解析器的参数不是 v > 0.8.0 中的对象?

在 graphql 查询中包装组件时出错

无法导入gql