【问题标题】:Graphql Close Bracket LocationGraphql 右括号位置
【发布时间】:2019-11-15 13:47:49
【问题描述】:

我的 GraphQL API 出现语法错误,我不知道为什么会这样。错误日志没有给我这个语法错误的位置。我浏览了所有模式,它们都有右括号。

C:\Users\Administrator\Desktop\PayMe\api\node_modules\graphql\error\syntaxError.js:24
  return new _GraphQLError.GraphQLError("Syntax Error: ".concat(description), undefined, source, [position]);
         ^
Syntax Error: Expected Name, found }

GraphQL request (53:1)
52:
53: }
    ^
54:

    at syntaxError (C:\Users\Administrator\Desktop\PayMe\api\node_modules\graphql\error\syntaxError.js:24:10)
    at expect (C:\Users\Administrator\Desktop\PayMe\api\node_modules\graphql\language\parser.js:1463:32)
    at parseName (C:\Users\Administrator\Desktop\PayMe\api\node_modules\graphql\language\parser.js:96:15)
    at parseInputValueDef (C:\Users\Administrator\Desktop\PayMe\api\node_modules\graphql\language\parser.js:920:14)
    at many (C:\Users\Administrator\Desktop\PayMe\api\node_modules\graphql\language\parser.js:1520:16)
    at parseInputFieldsDefinition (C:\Users\Administrator\Desktop\PayMe\api\node_modules\graphql\language\parser.js:1083:50)
    at parseInputObjectTypeDefinition (C:\Users\Administrator\Desktop\PayMe\api\node_modules\graphql\language\parser.js:1067:16)
    at parseTypeSystemDefinition (C:\Users\Administrator\Desktop\PayMe\api\node_modules\graphql\language\parser.js:736:16)
    at parseDefinition (C:\Users\Administrator\Desktop\PayMe\api\node_modules\graphql\language\parser.js:142:16)
    at many (C:\Users\Administrator\Desktop\PayMe\api\node_modules\graphql\language\parser.js:1523:16)
    at parseDocument (C:\Users\Administrator\Desktop\PayMe\api\node_modules\graphql\language\parser.js:113:18)
    at Object.parse (C:\Users\Administrator\Desktop\PayMe\api\node_modules\graphql\language\parser.js:48:10)
    at Object.buildSchemaFromTypeDefinitions (C:\Users\Administrator\Desktop\PayMe\api\node_modules\graphql-tools\src\generate\buildSchemaFromTypeDefinitions.ts:37:19)
    at Object.makeExecutableSchema (C:\Users\Administrator\Desktop\PayMe\api\node_modules\graphql-tools\src\makeExecutableSchema.ts:52:18)
    at new ApolloServerBase (C:\Users\Administrator\Desktop\PayMe\api\node_modules\apollo-server-core\src\ApolloServer.ts:195:21)
    at new ApolloServer (C:\Users\Administrator\Desktop\PayMe\api\node_modules\apollo-server-express\src\ApolloServer.ts:68:1)
    at Object.<anonymous> (C:\Users\Administrator\Desktop\PayMe\api\src\app.ts:31:16)
    at Module._compile (internal/modules/cjs/loader.js:776:30)
    at Module.m._compile (C:\Users\Administrator\Desktop\PayMe\api\node_modules\ts-node\src\index.ts:439:23)
    at Module._extensions..js (internal/modules/cjs/loader.js:787:10)
    at Object.require.extensions.(anonymous function) [as .ts] (C:\Users\Administrator\Desktop\PayMe\api\node_modules\ts-node\src\index.ts:442:12)
    at Module.load (internal/modules/cjs/loader.js:653:32)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! type@1.0.0 start: `ts-node ./src/app.ts`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the type@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\Administrator\AppData\Roaming\npm-cache\_logs\2019-07-04T21_23_11_333Z-debug.log

用户架构:

type User {
  id: Int!
  email: String!
  password: String!
  firstName: String
  lastName: String
  avatar: String
  accessToken: String
  itemID: String
  jwt: String @isAuthUser
  groups: [Group]
}

input UserInput {
    email: String
    password: String
    firstName: String
    lastName: String
    avatar: String
    accessToken: String
    itemID: String
}

type Query {
   getUser: User @isAuth
   loginUser(email: String!, password: String!): User
   logoutUser(email: String!): Boolean
}

type Mutation {
   createUser(data: UserInput): User
   updateAccessToken(accessToken: String): User @isAuth
}

组架构:

type Group {
  groupID: Int!
  name: String!
  description: String
  avatar: String

}

input GroupInput {
  name: String
  description: String
  avatar: String
  userID: String
}

type Query {
   groups: [Group]
   getGroup(groupID: Int!): Group @isAuth
   getUserGroups(userID: Int!): [Group] @isAuth

}

type Mutation {
  createGroup(data: GroupInput): Group @isAuth
  addMemberToGroup(userID: Int!, groupID: Int!): Group @isAuth
}

架构成员:

type MemberOf {
  id: Int!
  groupID: Int
  userID: Int
  isOwner: boolean
  isAdmin: boolean
}

type Query {

}

type Mutation {

}

我不确定这些模式的编译顺序。在我尝试在组和用户之间建立关系之前,它曾经编译和运行。我已将 @BelongsToMany 添加到 User 和 Group 并将 @ForiegnKey 添加到 MemberOf。

【问题讨论】:

  • 如果不实际包含您的架构,就不可能有人告诉您问题出在哪里。我可以告诉你 1) 这不是缺少括号,而是需要 name 的括号,通常意味着你错过了一些关键字;和 2) 错误位于架构的第 53 行。如果您有多个要组合的架构文件,则需要弄清楚它们的组合顺序以确定位置。
  • 我如何确定我的多个模式文件被合并的顺序?@DanielRearden
  • 请用相关代码更新您的问题

标签: graphql


【解决方案1】:

大括号在 GraphQL 文档中有三个用途。在可执行文档中,它们标识一个选择集,或一组被请求的字段。在类型定义中,它们要么标识一组字段(用于对象类型、输入对象类型或接口),要么标识一组枚举值。 在所有三种情况下,提供的集合都不能为空。也就是说,如果使用大括号,则必须在其中至少提供一项。

一对空的大括号 ({}) 将始终提供语法错误。

如果您不需要提供选择集/字段集/枚举值集,只需省略大括号即可:

# Invalid
type Query {
}

# Valid (at least syntactically)
type Query

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多