我是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}`)
});
我在做什么错了?
答案 0 :(得分:1)
在遵循深度模块化的模式时,您要在其自己的文件中拥有每个类型定义,并在其自己的文件中拥有每个解析器集,则需要使用 Scanner scan = new Scanner(System.in);
System.out.println("Please enter grade.");
String gradeLetter = scan.next();
String message = "A";
switch (gradeLetter) {
case "A":
message = "Excellent!";
break;
case "B":
message = "Good job.";
break;
case "C":
message = "You passed.";
break;
case "D":
message = "You can do better.";
break;
case "F":
message = "You failed.";
break;
default: message = gradeLetter + " is invalid.";
}
System.out.println(message);
关键字并创建“空”定义。
假设您在单独的文件中具有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
}
。然后在最后添加用户和root。
在用户文件中,您需要这样做:
Query
因此, extend type Query {
getUsers: [User]
}
关键字是您扩展在索引文件中创建的空查询的原因。
您可以在https://blog.apollographql.com/modularizing-your-graphql-schema-code-d7f71d5ed5f2
上阅读有关模块化的更多信息。