【问题标题】:Error: Cannot extend type "Query" because it is not defined错误:无法扩展类型“查询”,因为它没有定义
【发布时间】:2020-02-19 07:19:48
【问题描述】:

我在 GraphQL 模式中扩展查询时遇到此错误。这是错误堆栈:

stack=[Error: Cannot extend type "Query" because it is not defined.,     at assertValidSDL (/NodeGraphQL/node_modules/graphql/validation/validate.js:108:11),     
at Object.buildASTSchema (/NodeGraphQL/node_modules/graphql/utilities/buildASTSchema.js:71:34),     
at Object.buildSchemaFromTypeDefinitions (/NodeGraphQL/node_modules/graphql-tools/dist/generate/buildSchemaFromTypeDefinitions.js:23:28),     
at Object.makeExecutableSchema (/NodeGraphQL/node_modules/graphql-tools/dist/makeExecutableSchema.js:26:29),     
at ApolloServer.initSchema (/NodeGraphQL/node_modules/apollo-server-core/dist/ApolloServer.js:272:49),     
at new ApolloServerBase (/NodeGraphQL/node_modules/apollo-server-core/dist/ApolloServer.js:202:30),     
at new ApolloServer (/NodeGraphQL/node_modules/apollo-server-express/dist/ApolloServer.js:59:9),     
at Object.<anonymous> (/NodeGraphQL/dist/server.js:17:16),     
at Module._compile (internal/modules/cjs/loader.js:689:30),     at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10),     
at Module.load (internal/modules/cjs/loader.js:599:32),     at tryModuleLoad (internal/modules/cjs/loader.js:538:12),     
at Function.Module._load (internal/modules/cjs/loader.js:530:3),     at Function.Module.runMain (internal/modules/cjs/loader.js:742:12),     
at startup (internal/bootstrap/node.js:283:19),     at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)]

这是我的架构的样子:

import { gql } from 'apollo-server-express';

export const ticket = gql`
  type Ticket {
    id: ID!
    subject: String
    priority_id: Int
    status_id: Int
    user_id: Int
    assigned_to_user_id: Int
  }

  extend type Query {
    tickets: [Ticket]
    ticket(id: ID!): Ticket
  }
`;

寻找解决方案:)

【问题讨论】:

标签: node.js typescript graphql apollo apollo-server


【解决方案1】:

extend 关键字用于扩充同一架构中的现有类型。例如,我们可以这样做:

type User {
  username: String!
}

extend type User {
  firstName: String!
  lastName: String!
}

这在将架构拆分到多个文件或从基本架构构建架构时很有用。

但是,您不能扩展不存在的类型。您的架构中没有定义 Query 类型,因此您无法扩展它。只需删除 extend 关键字即可。

【讨论】:

  • 我指的是 (blog.logrocket.com/from-rest-to-graphql) 他们在其中使用了 extend 关键字。不知道这个有什么用
  • @rahul 请查看我的编辑以获取更多说明。我不确定您引用的教程为什么使用 extend 关键字——如果您使用的是 graphql-modules,您实际上不需要它,因为该库在后台是如何工作的。但是对于graphql-modules,它应该可以工作。如果你使用那个库,你应该只在类型已经存在的情况下使用extend。
  • 我建议参考apollo-servergraphql-modules 的实际文档,而不是完全依赖教程。你会得到更好的例子,更好地解释你为什么要以某种方式做事。
  • 谢谢@Daniel,我正在使用 apollo-server-express 模块来构建 GraphQL 服务器。
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
相关资源
最近更新 更多