如何从 GraphQL 查询中获取字段值?

Posted

技术标签:

【中文标题】如何从 GraphQL 查询中获取字段值?【英文标题】:How can I get the field value from GraphQL query? 【发布时间】:2018-08-04 21:51:26 【问题描述】:

我有从 MongoDB 集合中查询值的 Apollo 客户端,然后我尝试从“findOne”中获取值。当我尝试获取值时(例如“eventname”,它会提醒“无法读取未定义的属性'eventname'”。

这是架构和解析器。

type Event 
    _id: ID!
    eventname: String!
    remark: String
    username: String
    createdAt: Date 
    updatedAt: Date
    registers: [Register]


type Query 
    eventList(_id: ID): Event

    eventList: async(parents, args,  Event ) => 
        const eventList = Event.findOne( _id: args._id );

        if (!eventList) 
            throw new Error('No such event found');
        

        return eventList;
    ,

来自客户端的查询:

class RegistersIndex extends Component 

    render()  
        const  data: loading, error, eventList, match  = this.props;
        console.log(eventList.eventname);
...
...
export const eventsListQuery = gql`
    query EventsListQuery ($eventid: ID!) 
    eventList (_id: $eventid) 
        _id
            eventname
            remark
            username
            createdAt
            updatedAt
    
  
`;

export default graphql(eventsListQuery, 
    options: (props) => (
        variables:  eventid: props.match.params._eventid ,
    )
)(RegistersIndex);

【问题讨论】:

你测试过 ``` console.log(data.eventList.eventname); ``` ? 请发布您的 GraphQL 端点配置 also.. 而data.loadingtruedata.eventList 预计是未定义的。 太棒了!!!!!!非常感谢大家。!!!!!! 【参考方案1】:

这可能是因为在获取数据时eventList 将是undefined。添加一个条件来检查loading是否为true,这样eventList字段只有在加载完成后才能访问。

render()  
    const  data: loading, error, eventList, match  = this.props;
    if (loading) return <div>Loading...</div>
    console.log(eventList.eventname);
    ...

【讨论】:

以上是关于如何从 GraphQL 查询中获取字段值?的主要内容,如果未能解决你的问题,请参考以下文章

在构建 Java GraphQL API 时,如何避免从数据库中过度获取(即仅获取查询中指定的字段)?

如何从 GraphQL 服务器获取平面数组作为响应

有没有办法将 GraphQL 查询字段分组到子/嵌套查询组中?

如何在graphql中获取响应中的所有字段而不在查询中传递任何字段名称

如何在 GraphQL 中导出字段定义

如何处理 GraphQL 中的嵌套输入