用于传递变量的 GraphQL 查询参数语法

Posted

技术标签:

【中文标题】用于传递变量的 GraphQL 查询参数语法【英文标题】:GraphQL query parameter syntax for passing variables 【发布时间】:2019-02-13 04:06:08 【问题描述】:

因此,我尝试通过 Meteor 应用程序中的 GraphQL 查询访问数据库中的特定文档。我从我的 url 解析文档 ID,我正在尝试创建一个 gql 查询来获取该文档,但是我的查询返回未定义,因为查询的参数未定义。我不确定我哪里出了问题,因为我对 GraphQL 还是很陌生。

查询

    const contactId = instance.getContactId();
    const CONTACT_QUERY = gql`
        query contact 
            contact(_id: "$contactId") 
                _id
                name
                customerId
                phone
                email
                position
                decisionMaker
            
        
    `;

架构

type Contact 
    _id: String!
    name: String!
    customerId: String
    phone: String
    email: String
    position: String
    decisionMaker: String


type Query 
    contacts: [Contact]
    contact(_id: String!): Contact

解析器

import  Contacts  from './contacts.js';

export default 
  Query:  
    contacts() 
        return Contacts.find().fetch();
    ,
    contact(contactId) 
        console.log(contactId);
        return Contacts.findOne(_id: contactId);
    
  ,
;

【问题讨论】:

variables 不会以这种方式传递 - 阅读文档并使用 query tester /graphiql 【参考方案1】:

执行 GraphQL 查询不会将文档加载到 minimongo 中,因此您的客户端 Meteor.Collections 将为空。通常人们选择使用 Meteor 的实时数据系统(出版物、订阅、集合和方法)或 Apollo(查询和突变)。如果您想执行后者,请按照 Apollo 的文档了解如何执行 CONTACT_QUERY 并访问结果。

【讨论】:

我正在使用 Apollo 和 blaze-apollo 包来处理数据。在我的 Blaze 模板上,我根据 ID 参数构建查询,并使用 blaze-apollo 包运行查询。 const 联系人 = Template.instance().gqlQuery( 查询:CONTACTS_QUERY, ).get();问题是它返回未定义,当我拥有所需文档的 ID 时,我不确定如何正确构建查询。 查看此部分和链接的watchQuery 选项,包括variables:github.com/Swydo/blaze-apollo#graphql-queries

以上是关于用于传递变量的 GraphQL 查询参数语法的主要内容,如果未能解决你的问题,请参考以下文章

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

GraphQL - Gatsby.js- React 组件。 - 如何查询变量/参数?

大话GraphQL新手上车

GraphQL新手上路

操作参数和 GraphQL 变量有啥区别?

如何将变量添加到 GraphQL 文件查询