При выполнении запроса GraphQL лучше всегда указывать тип выполняемой операции (запрос или изменение). Когда вы этого не сделаете, GraphQL предполагает, что вы делаете запрос, что здесь не так. Вы не указали, наблюдали ли вы какие-либо ошибки, но я готов поспорить, что GraphQL возвращает что-то вроде cannot query field remove on Query
.
Измените DELETE_ARTICLE_QUERY, чтобы включить операцию:
export const DELETE_ARTICLE_QUERY = (id) => (`mutation {
Рекомендуется включать имя операции в целях отладки, чтобы вы также могли сказать:
export const DELETE_ARTICLE_QUERY = (id) => (`mutation DeleteArticle {
Изменить. Судя по указанной вами ошибке, объект схемы настроен неправильно. Это должно выглядеть примерно так:
const schema = new GraphQLSchema({
query: new GraphQLObjectType({
name: "WhateverNameYouWantForQuery",
fields: {
// each query is a property here
}
}),
mutation: new GraphQLObjectType({
name: "WhateverNameYouWantForMutation",
fields: {
// each mutation is a property here
}
}),
});
Если вы определяете свои мутации как отдельную переменную (Mutation
), вы можете помочь значению свойства мутации как этой переменной:
const schema = new GraphQLSchema({
query: new GraphQLObjectType({
// query props
}),
mutation: Mutation
}),
});
Вот рабочий пример, который вы можете выбросить из коробки и поэкспериментировать. После запуска сервера вы можете перейти к http://localhost:3000/graphql
в своем браузере, чтобы получить доступ к интерфейсу GraphiQL и поиграть с потенциальными запросами / изменениями в нем.
const graphqlHTTP = require('express-graphql');
const app = require('express')();
const {
GraphQLSchema,
GraphQLObjectType,
GraphQLNonNull,
GraphQLString,
GraphQLList
} = require('graphql');
const articleType = new GraphQLObjectType({
name: 'Article',
fields: {
title: {
type: GraphQLString,
},
},
});
const Mutation = new GraphQLObjectType({
name: "RootMutationnnnn",
fields: () => ({
remove: {
type: articleType,
args: {
id: {
type: new GraphQLNonNull(GraphQLString)
}
},
resolve: (value, {id}) => {
return {title: 'Testing a delete'};
}
}
})
});
const schema = new GraphQLSchema({
query: new GraphQLObjectType({
name: "RootQueryyyyy",
fields: {
articles: {
type: new GraphQLList(articleType),
resolve: () => {
return [{title: 'Test title'}, {title: 'Test title'}];
}
}
}
}),
mutation: Mutation
});
const root = {};
app.post('/graphql', graphqlHTTP({
schema,
rootValue: root,
graphiql: false,
}));
app.get('/graphql', graphqlHTTP({
schema,
rootValue: root,
graphiql: true,
}));
app.listen(3000, function(){
console.log('listening on port 3000');
});
person
Daniel Rearden
schedule
21.07.2017