我如何在 graphql 查询更新突变?
How I query the update mutation at graphql?
我有我的代码,还有一些问题。
1. 如何使用 'updateMessage' 突变?
和
2. 为什么我必须使用'Message Class'?
或者使用 Class 有什么不同?
我知道如何为 createMessage Mutation 编写查询
但我不知道如何为 updateMessage Mutation 编写。
var express = require('express');
var graphqlHTTP = require('express-graphql');
var {buildSchema } = require('graphql');
var schema = buildSchema(`
type Query{
getMessage(id: ID!): Message
}
type Mutation {
createMessage(input: MessageInput): Message
updateMessage(id: ID!, input: MessageInput): Message
}
input MessageInput {
content: String
author: String
}
type Message {
id: ID!
content: String
author: String
}
`);
class Message{
constructor(id,{content, author}){
this.id = id;
this.content = content;
this.author = author;
}
};
var fakeDatabase = {};
var root = {
getMessage: function({id}){
if(!fakeDatabase[id]){
throw new Error('no message exists with id' + id);
}
return new Message(id, fakeDatabase[id]);
},
createMessage: function ({input}){
var id = require('crypto').randomBytes(10).toString('hex');
fakeDatabase[id]=input;
return new Message(id, input);
},
updateMessage: function({id,input}){
if (!fakeDatabase[id]){
throw new Error('no message exists with id' +id);
}
fakeDatabase[id] = input;
return new Message(id,input);
},
};
var app = express();
app.use('/graphql', graphqlHTTP({
schema: schema,
rootValue: root,
graphiql: true,
}));
app.listen (4000, ()=> console.log('Running a GraphQL API server at
localhost:4000/graphql'));
问题一:
首先,您需要创建消息并从响应中获取消息 ID
mutation {
createMessage(input: {content:"this is content", author: "john"}) {
id
content
author
}
}
# response
{
"data": {
"createMessage": {
"id": "956ea83a4ac8e27ff0ec",
"content": "this is content",
"author": "john"
}
}
}
然后使用消息 ID 更新消息
mutation {
updateMessage(id: "956ea83a4ac8e27ff0ec", input: {content:"this is content", author: "john doe"}) {
content
author
}
}
最后,检查消息是否更新。
query {
getMessage(id: "956ea83a4ac8e27ff0ec") {
content
author
}
}
问题二:
消息 class 充当模型 class,它将相关字段封装到可以轻松重用的结构中。
我有我的代码,还有一些问题。 1. 如何使用 'updateMessage' 突变? 和 2. 为什么我必须使用'Message Class'? 或者使用 Class 有什么不同?
我知道如何为 createMessage Mutation 编写查询 但我不知道如何为 updateMessage Mutation 编写。
var express = require('express');
var graphqlHTTP = require('express-graphql');
var {buildSchema } = require('graphql');
var schema = buildSchema(`
type Query{
getMessage(id: ID!): Message
}
type Mutation {
createMessage(input: MessageInput): Message
updateMessage(id: ID!, input: MessageInput): Message
}
input MessageInput {
content: String
author: String
}
type Message {
id: ID!
content: String
author: String
}
`);
class Message{
constructor(id,{content, author}){
this.id = id;
this.content = content;
this.author = author;
}
};
var fakeDatabase = {};
var root = {
getMessage: function({id}){
if(!fakeDatabase[id]){
throw new Error('no message exists with id' + id);
}
return new Message(id, fakeDatabase[id]);
},
createMessage: function ({input}){
var id = require('crypto').randomBytes(10).toString('hex');
fakeDatabase[id]=input;
return new Message(id, input);
},
updateMessage: function({id,input}){
if (!fakeDatabase[id]){
throw new Error('no message exists with id' +id);
}
fakeDatabase[id] = input;
return new Message(id,input);
},
};
var app = express();
app.use('/graphql', graphqlHTTP({
schema: schema,
rootValue: root,
graphiql: true,
}));
app.listen (4000, ()=> console.log('Running a GraphQL API server at
localhost:4000/graphql'));
问题一:
首先,您需要创建消息并从响应中获取消息 ID
mutation {
createMessage(input: {content:"this is content", author: "john"}) {
id
content
author
}
}
# response
{
"data": {
"createMessage": {
"id": "956ea83a4ac8e27ff0ec",
"content": "this is content",
"author": "john"
}
}
}
然后使用消息 ID 更新消息
mutation {
updateMessage(id: "956ea83a4ac8e27ff0ec", input: {content:"this is content", author: "john doe"}) {
content
author
}
}
最后,检查消息是否更新。
query {
getMessage(id: "956ea83a4ac8e27ff0ec") {
content
author
}
}
问题二: 消息 class 充当模型 class,它将相关字段封装到可以轻松重用的结构中。