Estoy usando express-graphql junto con la siguiente consulta:
invitations { sent received }La definición del esquema (simplificado) es la siguiente:
const InvitationType = new GraphQLObjectType({ name: 'InvitationType', description: 'Friends invitations', fields: { sent: { type: new GraphQLList(GraphQLString), description: 'Invitations sent to friends.', resolve() { return ['sentA']; } }, received: { type: new GraphQLList(GraphQLString), description: 'Invitations received from friends.', resolve() { return ['receivedA', 'receivedB']; } } } }); // Root schema const schema = new GraphQLSchema({ query: new GraphQLObjectType({ name: 'RootQueryType', fields: { invitations: { type: InvitationType // no resolve() method here. } } }) }); Sin embargo, los métodos de resolve nunca se llaman para los campos sent y received . La consulta anterior devuelve:
{data: {invitations: {sent: null, received: null}}} ¿Hay alguna forma de resolver los campos anidados ( sent y received ) sin definir un método resolve() en el campo principal ( invitations )?
¡Esto funcionó para mí! Según la documentación de GraphQL , la ejecución continuará si el método de resolución devuelve un valor no escalar. Entonces el siguiente código funciona:
// Root schema const schema = new GraphQLSchema({ query: new GraphQLObjectType({ name: 'RootQueryType', fields: { invitations: { type: InvitationType, resolve: () => ({}) // Resolve returns an object. } } }) });Espero que esto ayude. ¡Salud!