2016-01-28 3 views
0

Я определил мутацию GraphQL с использованием graphql-relay, но у меня возникли проблемы с выяснением того, как передать мутацию.Синтаксис для передачи мутации в мутацию мутации graphqlWithClientMutationId

Вот соответствующая схема:

const userType = new GraphQLObjectType({ 
    name: 'User', 
    description: 'user', 
    fields:() => ({ 
    id: { 
     type: new GraphQLNonNull(GraphQLString), 
     description: 'The UUID for the user.', 
     resolve(user) { 
     return user.uuid; 
     }, 
    }, 
    }) 
}); 

const registerUser = mutationWithClientMutationId({ 
    name: 'registerUser', 
    inputFields: { 
    }, 
    outputFields: { 
    user: { 
     type: userType, 
     resolve: (payload) => { 
     models.user.findById(payload.userId); 
     } 
    }, 
    }, 
    mutateAndGetPayload: (args) => { 
    var newUser = models.user.build().save(); 
    return { 
     userId: newUser.id, 
    }; 
    } 
}); 


const rootMutation = new GraphQLObjectType({ 
    name: 'RootMutationType', 
    fields: { 
    registerUser: registerUser, 
    }, 
}); 

const schema = new GraphQLSchema({ 
    query: rootQuery, 
    mutation: rootMutation, 
}); 

Что нужно HTTP-вызов выглядеть, чтобы зарегистрировать нового пользователя и получить обратно USERID?

Спасибо!

ответ

0

я понял формат мутации, которая работала:

mutation RootMutationType { 
    registerUser(input:{clientMutationId:"123"}){ 
    clientMutationId, user { id } 
    } 
} 
1

Я хочу отметить, что я вижу, что вы говорите, что ваша мутация не требует никаких параметров - как она знает, что представляют данные нового пользователя? Вероятно, вам понадобятся некоторые параметры этой мутации. Они будут доступны для вашего mutateAndGetPayload по этому первому параметру функции. (Я не говорю, что каждая мутация нуждается в параметрах, но это, вероятно, так и есть)

Если вы используете Relay, есть довольно хорошая информация о official document о том, как использовать ваши мутации из Relay. Особенно внизу внизу, где показаны различные конфигурации мутаторов. Если вы используете подключения, вы можете использовать RANGE_ADD, чтобы добавить эту новую учетную запись в хранилище реле вручную, иначе, если вы хотите выполнить более широкий выбор, вы можете использовать FIELDS_CHANGE. Вы сказали, что вам нужен новый идентификатор пользователя после завершения мутации. Если вы используете Relay, вам может потребоваться изучить REQUIRED_CHILDREN, чтобы указать, что независимо от вычисленного запроса, который будет создавать Relay, вы всегда хотите, чтобы этот идентификатор был запрошен.

Выход вашей мутации является userType, поэтому вы сможете получить к нему доступ с фрагментом от типа полезной нагрузки, которая, вероятно, будет RegisterUserPayload, что может выглядеть как ...

fragment on RegisterUserPayload { 
    user { 
    id 
    } 
} 

Теперь предполагается, что вы используете Relay. Если вы хотите попробовать это вручную с помощью GraphiQL, то вы можете использовать примеры того, как делать мутации через GraphQL Mutation docs. Есть прямой пример того, как вы запросите свою мутацию.

Последнее, поскольку вы спросили, как это сделать на низком уровне выдачи запроса HTTP самостоятельно, для этого вы можете посмотреть документацию express-graphql, which explains, как запросить его.

+0

Имеет смысл. Спасибо, Райан! –

Смежные вопросы