【问题标题】:merge different schema in graphql在graphql中合并不同的模式
【发布时间】:2021-02-05 19:26:17
【问题描述】:

schema.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
}

`);

index.js

app.use(
'/graphql',
graphqlHTTP({
    schema: graphQlSchema,
    rootValue: graphQlResolvers,
    graphiql: true
})
);

我只是想学习 graphql,这是我的第一次,所以我有点困惑上面的查询工作正常,但我想要 3 个不同的文件用于预订、用户、事件并将它们合并到一个文件名索引中。 js,然后在主 index.js 中导入,它高于一个。这是我第一次学习graphql。任何帮助将不胜感激

【问题讨论】:

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


    【解决方案1】:

    您可以使用graphql-tools 包中的Type definitions (SDL) merging 来合并您的类型定义文件。

    此工具合并了 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
    

    【讨论】:

      猜你喜欢
      • 2019-03-01
      • 2021-10-30
      • 2020-07-30
      • 1970-01-01
      • 2021-09-01
      • 2016-12-09
      • 2018-09-19
      • 2020-12-18
      • 1970-01-01
      相关资源
      最近更新 更多