如何解决GraphQL错误,字段“ x”必须没有选择,因为类型“ String”没有子字段

时间:2020-03-04 18:34:29

标签: graphql gatsby

我正在使用Gatsby和GraphQL,对GraphQL还是陌生的。

我具有以下架构定义:

exports.createSchemaCustomization = ({ actions }) => {
  const { createTypes } = actions;
  const typeDefs = `
    type MarkdownRemark implements Node {
      frontmatter: Frontmatter
    }
    type Frontmatter {
      title: String!
      products: [Product]
    }
    type Product @dontInfer {
      name: String!
      price(price: Int = 1): Float
      description: String
      images: [ProductImage]
    }
    type ProductImage {
      url: String
    }
  `;
  createTypes(typeDefs);
};

然后在我的页面上,我使用以下查询:

query {
  markdownRemark(fileRelativePath: { eq: "/content/pages/products.md" }) {
    ...TinaRemark
    frontmatter {
      title
      products {
        name
        price
        description
        images {
          url {
            childImageSharp {
              fluid(maxWidth: 1920) {
                ...GatsbyImageSharpFluid_withWebp
              }
            }
          }
        }
      }
    }
    html
  }
}

然后我收到以下错误:

Field "url" must not have a selection since type "String" has no subfields.

有人对如何解决此错误有任何建议吗?

另外,childImageSharp是什么?我想知道定义它的术语是什么。是GraphQL的“选择器”还是“功能”?

2 个答案:

答案 0 :(得分:1)

应该是

query {
  markdownRemark(fileRelativePath: { eq: "/content/pages/products.md" }) {
    ...TinaRemark
    frontmatter {
      title
      products {
        name
        price
        description
        images {
          url 
        }
      }
    }
    html
  }
}

因为定义是

 type ProductImage {
      url: String
    }

url显然没有子字段。

答案 1 :(得分:0)

我在返回布尔值时遇到了类似的问题。对我来说,不是这样的

mutation {
   someFunc(
      memo: "test memo"
  ) {
     success
  }
}

我需要这个

mutation {
   someFunc(
      memo: "test memo"
  ) 
}