我是GraphQL的新手,我正试图做一个突变来从我的数据库中删除一篇文章,但我不知道如何删除。我使用Node.js,猫鼬和GraphQL。
这是我的模式的变异。
const Mutation = new GraphQLObjectType({
name: 'Mutation',
description: 'Articles Mutations',
fields: () => ({
remove: {
type: articleType,
description: 'Deletes an article by id',
args: {
id: {
type: new GraphQLNonNull(GraphQLString)
}
},
resolve: (value, {id}) => {
return db.Article.findOneAndRemove({_id: new ObjectId(id)});
}
}
})
});
这是我在调用API删除文章时使用的查询。
export const DELETE_ARTICLE_QUERY = (id) => (`{
remove(id: "${id}") {
id
author
content
published
tags
title
excerpt
}
}`);
我做错了什么?
我收到一个错误的400请求。消息:“无法查询类型为“变异”的字段“删除”
在发出GraphQL请求时,最好始终指定您正在执行的操作类型(查询或更改)。当您做不到这一点时,GraphQL会假设您正在进行查询,但这里的情况并非如此。您没有指定是否看到任何错误,但我敢打赌GraphQL正在返回类似于无法在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
}
}),
});
如果您将您的突变定义为一个单独的变量(突变
),您将协助突变属性的值作为该变量:
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');
});
问题内容: 我已经为Employee类的父类是抽象的并且父类中的clone()方法是抽象的编写了此克隆方法。我想用此代码复制Employee对象的原始数据类型,而不是复制每个原始数据单独键入,但是此代码在我调用clone()方法的行中有问题。(此代码在Employee类中) 错误是:来自对象类型的方法clone()不可见。 但是我的Employee类在类层次结构中,可以访问Object类中受保护的
问题内容: 我有这个查询: 内部查询运行得非常快(不到0.1秒),以获取两个ID,一个ID表示状态1,一个ID表示状态2,然后它根据主键进行选择,以便对其进行索引。说明查询说,它仅使用where搜索135k行,我一生都无法弄清楚为什么这么慢。 问题答案:
我有一个关于书库的问题...我想写一个有3个堆栈的程序,我想在每个堆栈上添加这些操作(我应该使用数组): 1.创建堆栈2。按3号。流行音乐4号。显示每个堆栈的顶部 我写的程序,但我遇到了这些错误: 错误4错误LNK2019:未解析的外部符号“public:int\u thiscall stack::IsFull2(void)”(?IsFull2@stack@@QAEHXZ)在函数“public:v
我试图实现连接,但我面临错误。我有产品表和商店表。产品表引用通过外键存储表,如下所示: 产品JAVA 现在,我展示tore.java 现在,我展示仓库 现在,这个错误是因为我在最后两个查询中实现了join。我想做的是购买所有商店位于特定城市或州的产品,如上图所示。 我遇到的错误是: 启动应用程序上下文时出错。要显示自动配置报告,请在启用调试的情况下重新运行应用程序。2016-10-16 09:53
问题内容: 我正在经历一些正在维护的查询,并且程序员向我输入了“似乎1 = 1”的查询,这些查询似乎总是评估为true。 这有好处吗? 这个问题不是这个问题的答案。 子句: 没有编程或if语句将an和推入其中。直接查询。 如果您可以取消关闭它,我想知道是否有一个目的,以便在不需要时可以重写并删除1 = 1。 问题答案: 它是动态查询吗?有时在基于可选参数构建动态查询时很有用。
尝试在每周一8:15运行时间表,我尝试了以下表达式: 我想这意味着: 分钟数:15 小时:8 月日:每隔 月份:每 星期几:仅周一 年份:每 文件:http://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html