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

编程入门 行业动态 更新时间:2024-10-07 05:27:06

在 graphql 中使用联合<a href=https://www.elefans.com/category/jswz/34/1771355.html style=类型时重用解析器"/>

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

我有 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);
回答如下:

更多推荐

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

本文发布于:2024-05-30 15:58:34,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:类型   graphql

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!