将变量传递给阿波罗查询时出错

Posted

技术标签:

【中文标题】将变量传递给阿波罗查询时出错【英文标题】:Error when passing variable to apollo query 【发布时间】:2019-09-28 21:25:56 【问题描述】:

创建了一个类似于 example 的 Apollo 查询,但不断收到此错误:Variable "$id" of required type "ID!" was not provided.

我的架构:

type RootQuery 
    person(_id: ID!): Person!

和解析器:

 person: async args => 
    const person = await Person.findById(args._id);
    return 
      _id: person._id,
      name: person.name,
      location: person.location,
      address: person.address,
    ;
  

localhost:3000/graphql中正常工作 我正在传递一个 id 并取回数据。

但是,它在客户端不起作用,错误说没有提供 id。

查询

const GET_PERSON_QUERY = gql`
  query person($id: ID!) 
    person(_id: $id) 
      _id
      name
      location
      address
    
  
`;

查询组件

export const GetPerson = ( _id ) => 
  console.log("id: ", _id);
  return (
    <Query query=GET_PERSON_QUERY variables= _id >
      ( loading, error, data ) => 
        if (error) return <div>Error loading posts</div>;
        if (loading) return <div>Loading...</div>
          );
        return (
          <ul>
            <li>data.person.name</li>

          </ul>
        );
      
    </Query>
  );
;

例如将这个变量const _id = "abcabc"传递给组件 &lt;GetPerson _id=_id /> 导致错误。

【问题讨论】:

【参考方案1】:

如错误所示,id 是必需变量,但您没有将其传入。这是您的代码,它使用属性简写语法:

<Query query=GET_PERSON_QUERY variables= _id >

这相当于:

<Query query=GET_PERSON_QUERY variables= _id: _id >

所以您提供了一个名为 _id 的变量,而不是 id。将您的变量属性更改为:

<Query query=GET_PERSON_QUERY variables= id: _id >

【讨论】:

以上是关于将变量传递给阿波罗查询时出错的主要内容,如果未能解决你的问题,请参考以下文章

将变量传递给炮兵脚本时出错

Socket.io、Node.js:如何在 javascript.js 中将 javascript 变量传递给 mysql 查询?

将同一变量传递到 SQL 语句的多个部分时出错

在 azure synapse 存储过程中将表名作为参数传递时将查询结果分配给变量

我可以将变量从 JSP scriptlet 传递给 JSTL,但不能从 JSTL 传递给 JSP scriptlet 而不会出错

Graphql,react-apollo如何在加载组件状态时将变量传递给查询