[英]Best way for splitting GraphQL schema into different modules in express-graphql?
[英]merge different schema in graphql
架构.js
const { buildSchema } = require('graphql');
module.exports = buildSchema(`
type Booking {
_id: ID!
event: Event!
user: User!
}
type Event {
_id: ID!
title: String!
description: String!
price: Float!
creator: User
}
type User {
_id: ID!
email: String!
password: String
createdEvents: [Event!]
}
type RootQuery {
events: [Event!]!
users: [User!]!
bookings: [Booking!]!
}
schema {
query: RootQuery
}
`);
索引.js
app.use(
'/graphql',
graphqlHTTP({
schema: graphQlSchema,
rootValue: graphQlResolvers,
graphiql: true
})
);
我只是想学习 graphql,这是我的第一次,所以我有点困惑上面的查询工作正常,但我想要 3 个不同的文件用于预订、用户、事件并将它们合并到一个文件名 index.js 和之后在主 index.js 中导入高于 1 的那个。 这是我第一次学习graphql。 任何帮助将不胜感激
您可以使用graphql-tools
包的类型定义 (SDL) 合并来合并您的类型定义文件。
该工具合并了 GraphQL 类型定义和模式。 它旨在无冲突地合并所有可能的类型、接口、枚举和联合。
例如
types/booking.js
:
module.exports = `
type Booking {
_id: ID!
event: Event!
user: User!
}
`;
types/user.js
:
module.exports = `
type User {
_id: ID!
email: String!
password: String
createdEvents: [Event!]
}
`;
types/event.js
:
module.exports = `
type Event {
_id: ID!
title: String!
description: String!
price: Float!
creator: User
}
`;
types/index.js
:
const { mergeTypeDefs } = require('@graphql-tools/merge');
const bookingType = require('./booking');
const userType = require('./user');
const eventType = require('./event');
const rootTypes = `
type RootQuery {
events: [Event!]!
users: [User!]!
bookings: [Booking!]!
}
schema {
query: RootQuery
}
`;
const types = [bookingType, userType, eventType, rootTypes];
module.exports = mergeTypeDefs(types);
server.js
:
const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const { buildSchema, print } = require('graphql');
const typeDefs = require('./types');
const app = express();
const port = 4000;
const schema = buildSchema(print(typeDefs));
console.log(print(typeDefs));
app.use(
'/graphql',
graphqlHTTP({
schema,
graphiql: true,
}),
);
app.listen(port, () => console.log('Server started at port:', port));
服务器日志:
type Booking {
_id: ID!
event: Event!
user: User!
}
type User {
_id: ID!
email: String!
password: String
createdEvents: [Event!]
}
type Event {
_id: ID!
title: String!
description: String!
price: Float!
creator: User
}
type RootQuery {
events: [Event!]!
users: [User!]!
bookings: [Booking!]!
}
schema {
query: RootQuery
}
Server started at port: 4000
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.