GraphQL 架构错误

Posted

技术标签:

【中文标题】GraphQL 架构错误【英文标题】:GraphQL schema error 【发布时间】:2017-06-12 02:23:26 【问题描述】:

所以当我启动我的服务器时,我会得到这个错误列表

/Users/charlie/workspace/HackQLServer/node_modules/graphql/language/parser.js:966 throw (0, _error.syntaxError)(lexer.source, token.start, 'Expected ' + kind + ', found ' + (0, _lexer.getTokenDesc)(token)); ^ GraphQLError at syntaxError (/Users/charlie/workspace/HackQLServer/node_modules/graphql/error/syntaxError.js:28:15) at expect (/Users/charlie/workspace/HackQLServer/node_modules/graphql/language/parser.js:966:32) at parseName (/Users/charlie/workspace/HackQLServer/node_modules/graphql/language/parser.js:88:15) at parseInputValueDef (/Users/charlie/workspace/HackQLServer/node_modules/graphql/language/parser.js:743:14) at many (/Users/charlie/workspace/HackQLServer/node_modules/graphql/language/parser.js:1015:16) at parseArgumentDefs (/Users/charlie/workspace/HackQLServer/node_modules/graphql/language/parser.js:735:10) at parseFieldDefinition (/Users/charlie/workspace/HackQLServer/node_modules/graphql/language/parser.js:714:14) at any (/Users/charlie/workspace/HackQLServer/node_modules/graphql/language/parser.js:1002:16) at parseObjectTypeDefinition (/Users/charlie/workspace/HackQLServer/node_modules/graphql/language/parser.js:683:16) at parseTypeSystemDefinition (/Users/charlie/workspace/HackQLServer/node_modules/graphql/language/parser.js:607:16) at parseDefinition (/Users/charlie/workspace/HackQLServer/node_modules/graphql/language/parser.js:148:16) at parseDocument (/Users/charlie/workspace/HackQLServer/node_modules/graphql/language/parser.js:106:22) at Object.parse (/Users/charlie/workspace/HackQLServer/node_modules/graphql/language/parser.js:43:10) at buildSchemaFromTypeDefinitions (/Users/charlie/workspace/HackQLServer/node_modules/graphql-tools/src/schemaGenerator.ts:145:37) at _generateSchema (/Users/charlie/workspace/HackQLServer/node_modules/graphql-tools/src/schemaGenerator.ts:72:18) at makeExecutableSchema (/Users/charlie/workspace/HackQLServer/node_modules/graphql-tools/src/schemaGenerator.ts:97:20)

所有这些都出现了。我真的不明白我的错误在哪里。这是我的架构文件,我认为错误是

const typeDefinitions = `
    type Author 
      id: Int
      firstName: String
      lastName: String
      posts: [Post]
    

    type Post 
      id: Int
      title: String
      text: String
      author: Author
    

type Query 
  author(firstName: String, lastName: String): Author
  allPosts(): [Post!]!


schema 
  query: Query
`

export default [typeDefinitions]

如果您认为错误可能源于它,这也是我的解析器文件

import  Author, Post  from './connectors'

const resolvers = 
  Query: 
    author: (root, args) => 
      return Author.find( where: args )
    ,
    allPosts: (root, args) => 
      return Post.findAll()
    ,
    allAuthors: (root, args) => 
      return Author.findAll()
    
  ,
  Author: 
    posts: (author) => 
      return author.getPosts()
    
  ,
  Post: 
    author: (post) => 
      return post.getAuthor()
    
  


export default resolvers

如果您看到任何内容,请告诉我,因为我无法弄清楚这一点。我还在使用 Sequelize 与 sqlite 进行数据库连接,以防您想知道我的模型查询的语法是什么。

【问题讨论】:

【参考方案1】:

我认为错误在这一行

type Query author(firstName: String, lastName: String): Author allPosts(): [Post!]!

因为allPost 没有参数,所以不需要双亲。应该是

type Query author(firstName: String, lastName: String): Author allPosts: [Post!]!

遇到这样的神秘错误, throw (0, _error.syntaxError)(lexer.source, token.start, 'Expected ' + kind + ', found ' + (0, _lexer.getTokenDesc)(token)) 很可能是架构文件中的无效语法引起的

【讨论】:

以上是关于GraphQL 架构错误的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL 架构文件应包含有效的 GraphQL 自省查询结果

在 GraphQL 架构中使用泛型对象作为输入类型时出现问题错误:架构必须包含唯一的命名类型

如何修复 graphql 突变类型名错误

使用 graphql-tools 打印远程模式时出现 getDirectives 错误

importSchema GraphQL 错误:ENOENT:没有这样的文件或目录,打开“./schema.graphql”

无法解析自定义对象 graphql 架构