在 graphql 中使用联合类型时重用解析器

问题描述 投票:0回答:0

我有 apollo-server 设置,其中有:

  • 不同的车
  • 汽车包含不同的引擎
  • 引擎可以是不同容量和燃料类型的柴油或汽油

要获取汽车(模型和引擎数据),首先我需要获取汽车模型(硬编码),然后根据这些模型获取引擎信息。

我对 PetrolEngine 和 DieselEngine 有单独的查询。
是否有可能让 apollo 以某种方式理解使用这些查询(Query.petrolEngine、Query.dieselEngine)并在使用获取模型名称的“Car.engine”字段时区分它们。

import { ApolloServer } from '@apollo/server';
import { startStandaloneServer } from '@apollo/server/standalone';

const typeDefs = `#graphql

type Car {
    model: String
    engine: CarEngine
}

union CarEngine = DieselEngine | PetrolEngine

type DieselEngine {
    capacity: Float
    dieselType: String
}

type PetrolEngine {
    capacity: Float
    petrolType: String
}

type Query {
    cars: [Car]
    dieselEngine: DieselEngine
    petrolEngine: PetrolEngine
}
`;

const engines = {
    bmw: {capacity: 2.0, dieselType: 'L'},
    fiat: {capacity: 1.6, petrolType: '95'},
}

const resolvers = {
    Query: {
        cars: () => [{ model: 'bmw' }, { model: 'fiat' }],
        dieselEngine: (carModel) => { engines[carModel] },
        petrolEngine: (carModel) => { engines[carModel] },
    },
    Car: {
        engine: (parent) => {
        }
    },
    CarEngine: {
        __resolveType: (obj) => {
            console.log('resolving type for ', obj);
            if (obj?.dieselType) return 'DieselEngine';
            else return 'PetrolEngine';
        }
    }
};

const server = new ApolloServer({
    typeDefs,
    resolvers,
});

const { url } = await startStandaloneServer(server);

node.js graphql apollo apollo-server
© www.soinside.com 2019 - 2024. All rights reserved.