graphql
不仅可以用于查询数据,亦可用于修改数据,这里简单介绍 graphql
中修改数据的相关配置(mutation)。
图中 Author Schema
与 Mutation
部分
定义 Author
的数据结构并针对该结构定义相应的修改:
# path: scripts/base3/schema.graphql
# Author 表
type Author {
id: Int!
nickname: String
}
# 查询表(在本案例中不会被用到,只是用来防止报错)
type Query {
author: Author
}
# 修改表中数据
type Mutation {
changeNickname (
id: Int!
nickname: String
): Author
}
图中 resolvers
部分
数据源:
// path: scripts/base3/base3.js
const authors = [
{ id: 1, nickname: 'aaa' },
{ id: 2, nickname: 'bbb' },
{ id: 3, nickname: 'ccc' }
];
resolvers
部分:
// path: scripts/base3/base3.js
const resolvers = {
Mutation: {
changeNickname: (blank, update) => {
const author = _.find(authors, { id: update.id });
if (!author) {
throw new Error(`Couldn't find author with id ${ update.id }`);
}
author.nickname = update.nickname;
return author;
}
}
};
在 resolvers
部分定义了 changeNickname
这个 Mutation
的执行方式,即接受的字段中,id
用来查找相应的 author
,而 nickname
则是用于具体替换相应 author
的 nickname
schema 的构建方法和 1.graphql基础查询
中介绍的方法相同,这里不再赘述
// path: scripts/base3/base3.js
const query = `
mutation {
changeNickname(id: 1, nickname: "AAA") {
nickname
}
}
`;
graphql(schema, query).then((result) => {
// result = {
// "data": {
// "changeNickname": {
// "nickname": "AAA"
// }
// }
// }
});
详细代码可以参考 /scripts/base3 目录