【问题标题】:GraphQL throwing syntax errorsGraphQL 抛出语法错误
【发布时间】:2019-11-02 03:13:04
【问题描述】:

我正在开发 GraphQL 节点教程,并且已完成第 7 步。

https://www.howtographql.com/graphql-js/7-subscriptions/

我的datamodel.prisma 文件中的这段代码出现了一些语法错误:

directive @id on FIELD_DEFINITION
directive @unique on FIELD_DEFINITION
directive @createdAt on FIELD_DEFINITION
scalar DateTime

type Link {
    id: ID! @id
    createdAt: DateTime! @createdAt
    description: String!
    url: String!
    postedBy: User
    votes: [Vote!]!
}

type User {
    id: ID! @id
    name: String!
    email: String! @unique
    password: String!
    links: [Link!]!
    votes: [Vote!]!
}

type Vote {
    id: ID! @id
    link: Link!
    user: User!
}

但我仍然收到'User' type [@6:1] tried to redefine existing 'User' type [@15:5]'Link' type [@24:1] tried to redefine existing 'Link' type [@6:5]

我也不确定我是否正确声明了directivesscalars,因为官方教程中缺少这一点。

任何人都可以就如何解决这些问题提供任何建议吗?

Schema.graphql:

type Query {
    info: String!
    feed(filter: String, skip: Int, first: Int, orderBy: LinkOrderByInput): Feed!
}

type Feed {
    links: [Link!]!
    count: Int!
}

type AuthPayload {
    token: String
    user: User
}

type User {
    id: ID!
    name: String!
    email: String!
    links: [Link!]!
}

type Vote {
    id: ID!
    link: Link!
    user: User!
}

type Link {
    id: ID!
    description: String!
    url: String!
    postedBy: User
    votes: [Vote!]!
}

type Subscription {
    newLink: Link
    newVote: Vote
}

type Mutation {
    post(url: String!, description: String!): Link!
    signup(email: String!, password: String!, name: String!): AuthPayload
    login(email: String!, password: String!): AuthPayload
    vote(linkId: ID!): Vote
}

enum LinkOrderByInput {
    description_ASC
    description_DESC
    url_ASC
    url_DESC
    createdAt_ASC
    createdAt_DESC
}

【问题讨论】:

  • 如果你删除指令和标量行,它会起作用吗?
  • 您的实际架构是什么样的?您是否将生成的 Prisma 类型导入其中?
  • @TarunLalwani 如果我删除这些行会出现更多语法错误,我认为它们是必需的吗?
  • @DanielRearden 我已经在上面添加了 schema.graphql 文件

标签: javascript node.js graphql


【解决方案1】:

我以前没有使用过 Prisma,只看了一眼教程,但看起来你定义了两种用户类型;您在 datamodel.prisma 和 Schema.graphql 中有一个(我在教程中找不到 User 的两个定义)。如果它们被读入同一个实例,那将是 graphql 认为您正在尝试重新定义 User 类型的原因。删除一个,或者,如果适用,将第二个更改为 extend type User 应该可以解决语法错误。

【讨论】:

    【解决方案2】:

    今天早上我遇到了同样的错误,我感觉它与缓存有关。当我重命名变量时它消失了。在您的情况下,将所有 'Link' 定义/引用更改为 'LinkTwo' 并查看错误是否消失。与“用户”相同...将其更改为“用户二”。如果是这样,也许您可​​以在之后重命名它们。

    【讨论】:

      猜你喜欢
      • 2018-12-03
      • 2016-10-31
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      相关资源
      最近更新 更多