Skip to content

Latest commit

 

History

History
93 lines (77 loc) · 2.16 KB

3.graphql修改数据.md

File metadata and controls

93 lines (77 loc) · 2.16 KB

graphql 修改数据

graphql 不仅可以用于查询数据,亦可用于修改数据,这里简单介绍 graphql 中修改数据的相关配置(mutation)。

整体结构一览

docs/base3.png

数据结构与修改操作的定义

图中 Author SchemaMutation 部分

定义 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

图中 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 则是用于具体替换相应 authornickname

构建相应的 schema 对象

schema 的构建方法和 1.graphql基础查询 中介绍的方法相同,这里不再赘述

使用 schema 对象进行 update 操作

// 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 目录