类型时重用解析器"/>
在 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小时内删除。
发布评论