首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GraphiQL在查询中返回'null‘

GraphiQL在查询中返回'null‘
EN

Stack Overflow用户
提问于 2017-09-10 02:41:35
回答 1查看 1.6K关注 0票数 0

实际上,我正在使用一个GraphQL DB和一个来自neo4j_movie_recommendations代码的示例来试验Neo4j和neo4j_movie_recommendations。我有一个非常奇怪的问题,似乎是与javascript或GraphQL相关的。我做了一个简单的查询,而我可以看到数据可以由解析器(使用console.log) GraphQL返回一个'null‘值。以下是代码段:

代码语言:javascript
复制
const resolveFunctions = {
    Query: {
        allVoters(_, params) {
            let session = driver.session();
            let query = "MATCH (voter:Voter) RETURN voter;"
            return session.run(query, params)
                .then(result => {
                    return result.records.map(record => {
                        console.log("Voter: " + JSON.stringify(record))
                        return record.get("voter").properties
                    })
                })
        },

    },
    Voter: {
        memberOf(voter) {
            let session = driver.session(),
                params = { voterid: voter.voterid },
                query = `
                        MATCH (v:Voter)-[:MEMBER_OF]->(g:Group)
                        WHERE v.voterid = $voterid
                        RETURN g.name AS groupname;
                        `
            return session
                .run(query, params)
                .then(result => {
                    return result.records.map(record => {
                        console.log("Group Name " + record.get("groupname")) 
                        return record.get("groupname")
                    })
                })
        },

console.log显示正确的值,但GraphiQL显示名称,email..correctly显示字段的成员,但显示'null‘。有人能看到我做错了什么吗?

这是图式..。

代码语言:javascript
复制
export default `
type Voter {
  voterid     : String!
  email       : String!
  name        : String!
  nickname    : [String]
  address     : String
  altAddress  : String
  dob         : String
  profession  : String
  telephone   : String
  gender      : String
  skills      : [String]
  votesIn     : PD
  livesIn     : PD 
  memberOf    : [Group]
}
type Group {
  name        : String
  location    : String
  created     : String
  partof      : Division
}
type PD {
  number      : String
  location    : String
  created     : String
  description : String
  partof      : Division 
}
type Division {
  name        : String
  created     : String
  belongsto   : Constituency
 }
 type Constituency {
  name        : String
  created     : String
  reportsto   : Region
 }
 type Region {
  name        : String
  created     : String
  reportsto   : Exec
 }
 type Exec {
  name        : String
  created     : String
 }

type Query {
  allVoters: [Voter]!
  getVoter(voterid: String!): Voter
  }

  schema {
    query: Query
  }
`;

EDIT...add解析器解析器代码:

代码语言:javascript
复制
  getVoter(_, params) {
            let session = driver.session();
            let query = "MATCH (voter:Voter {voterid: $voterid}) RETURN voter;"
            return session.run(query, params)
                .then(result => {
                    return result.records.map(record => {
                        return record.get("voter").properties
                    })
                })
        },
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-10 03:36:38

无论解析器返回什么,都必须是模式定义的正确类型。如果您返回错误的类型(一个数字而不是一个字符串),GraphQL可能试图强迫它进入正确的类型,但在大多数情况下它只返回null。

您的memberOf字段应该是Group对象的数组。但是,在解析器中,您似乎返回了一个字符串数组:

代码语言:javascript
复制
return result.records.map(record => {
  return record.get("groupname")
})

您需要利用toObject方法,或者以其他方式将记录转换为一个对象,其中的字段与Group模式中指定的字段相匹配。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46136815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档