簡體   English   中英

Apollo Server - GraphQL 錯誤:只能有一種名為“查詢”的類型

[英]Apollo Server - GraphQL Error: There can be only one type named "Query"

我是 GraphQL 的新手。 我正在遵循 Internet 上的幾個指南,以“創建”一個使用 Apollo Server + Express + GraphQL + MongoDB 的小應用程序。

  • 我試圖復制這個YT指南(他的類型定義文件夾中創建root.js文件)。
  • 這一個用於測試目的。
  • 這個是為了確保我的文件夾結構是正確的。

編譯時我從 GraphQL 得到:

錯誤:只能有一種名為“用戶”的類型。

錯誤:只能有一種名為“查詢”的類型。

我的代碼結構如下:

  • 配置
  • 楷模
  • 解析器
    • 索引.js
    • 用戶.js
  • 類型定義
    • 索引.js
    • 根.js
    • 用戶.js
  • 索引.js

到目前為止,我的代碼如下所示:

typeDefs/user.js

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

const user = gql`
    type User {
        id: ID!
        name: String
        email: String
        password: String
    }

    type Query {
        getUsers: [User]
    }

    type Mutation {
        addUser(name: String!, email: String!, password: String!): User
    }
`;

export default user;

typeDefs/root.js

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

export default gql`
    extend type Query {
        _: String
    }

    type User {
        _: String
    }
`;

typeDefs/index.js

import root from './root';
import user from './user';

export default [
  root,
  user
];

然后在我的index.js 中

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

import typeDefs  from './typeDefs';
import resolvers from './resolvers';

const server = new ApolloServer({ typeDefs, resolvers });
const app = express();
server.applyMiddleware({ app });

app.disable('x-powered-by');

app.listen({ port: 4000 }, () => {
  console.log(`Server running at http://localhost:4000${server.graphqlPath}`)
});

我究竟做錯了什么?

當遵循深度模塊化的模式時,您希望將每個類型定義放在自己的文件中,並將每組解析器放在自己的文件中,您希望使用extend關鍵字並創建“空”定義。

假設您在不同的文件中有rootuser類型定義,將它們放在一起的索引文件應如下所示:

const user = require('./user');
const root= require('./root');
const typeDefs = gql`
    type Query{
        _empty: String
    }
    type Mutation {
        _empty: String
    }
    ${user}
    ${root}
`;

module.exports = typeDefs;

你正在使用

    type Query{
        _empty: String
    }

做一個空的Query 然后你在最后添加你的用戶和 root。

在您的用戶文件中,您需要:

    extend type Query {
        getUsers: [User]
    }

因此, extend關鍵字是您擴展在索引文件中創建的空查詢。

您可以在此處閱讀有關模塊化的更多信息https://blog.apollographql.com/modularizing-your-graphql-schema-code-d7f71d5ed5f2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM