[英]Apollo Server - GraphQL Error: There can be only one type named "Query"
我是 GraphQL 的新手。 我正在遵循 Internet 上的幾個指南,以“創建”一個使用 Apollo Server + Express + GraphQL + MongoDB 的小應用程序。
編譯時我從 GraphQL 得到:
錯誤:只能有一種名為“用戶”的類型。
錯誤:只能有一種名為“查詢”的類型。
我的代碼結構如下:
到目前為止,我的代碼如下所示:
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
關鍵字並創建“空”定義。
假設您在不同的文件中有root
和user
類型定義,將它們放在一起的索引文件應如下所示:
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.