无法访问变量。 Graphql 阿波罗

问题描述 投票:0回答:2

我将 NextJs 与 Graphql Apollo 和猫鼬一起使用。 当我使用 GraphiQL 直接在后面发出请求时它运行良好,但是当我在前面实现它时它不起作用

我无法访问变量我有一条消息-

{"errors":[{"message":"Variable \"$category\" of required type \"String!\" was not provided.","locations":[{"line":1,"column":16}]}]}

这里我定义了变量-

   const url = useRouter();
   const name = url.query.category?.toString().toLowerCase();

   const { data, loading, error } = useQuery(GET_PRODUCTS, { variables: { name : name}});

这是我的fethc -

export const GET_PRODUCTS = gql`
  query products($category: String!){
    products(category: $category) {
      title
      id
      img
      decsiprion
      brend
      price
      altDescription
      category
      article
    }
  }
`;

这是后端-

const ProductType = new GraphQLObjectType({
  name: "Product",
  fields: () => ({
    id: { type: GraphQLID },
    img: { type: GraphQLString },
    title: { type: GraphQLString },
    decsiprion: { type: GraphQLString },
    brend: { type: GraphQLString },
    price: { type: GraphQLInt },
    altDescription: { type: GraphQLString },
    category: { type: GraphQLString },
    article: { type: GraphQLInt },
  }),
});

const Rootquery = new GraphQLObjectType({
  name: "RootQueryType",
  fields: {
    products: {
      // take all products by category
      type: new GraphQLList(ProductType),
      args: { category: { type:GraphQLString }},
      resolve(parent, args) {
        return Product.find(args).exec();
      },
    },
    product: {
      // take only one by id
      type: ProductType,
      args: { id: { type: GraphQLID } },
      resolve(parent, args) {
        return Product.findById(args.id);
      },
    },
  },
});

我试着放置变量只是为了看看它是否有效,我确实喜欢这个 -

 const { data, loading, error } = useQuery(GET_PRODUCTS, { variables: { name : 'woundrecovery'}});

仍然收到错误消息。

graphql react-apollo
2个回答
1
投票

非常接近,我想你需要做的就是提供“类别”作为变量,所以像这样:

 const { data, loading, error } = useQuery(GET_PRODUCTS, { variables: { category : 'woundrecovery'}});

或者,在您的查询中,您可以不需要类别,因此您不必传递变量

query products($category: String!)
变成
query products($category: String)


1
投票

Graphql 期望在您传递给请求的变量对象中找到一个名为“category”的键。好变态

const { data, loading, error } = useQuery(GET_PRODUCTS, { variables: { name : 'woundrecovery'}});

const { data, loading, error } = useQuery(GET_PRODUCTS, { variables: { category : 'woundrecovery'}});

应该解决你的问题

© www.soinside.com 2019 - 2024. All rights reserved.