我有 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);