欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

graphql学习(二)

程序员文章站 2022-05-17 19:06:54
...

使用mutation修改数据

  1. 查询使用query,修改数据使用mutation
//修改的加input,来标识这个类型用来做输入的 
  input AccountInput {
name: String
age: Int
sex: String
department: String
salary: Int
}
//括号中的是形参,任意的 :后是类型
type Mutation {
createAccount ( input: AccountInput): Account
传递id,这个id是数据库中对应的那条要更新的
updateAccount(id: ID! , input: AccountInput): Account
}

服务端的修改接口

var express = require('express');
var {
    buildSchema
} = require('graphql')
const graphqlHTTP = require('express-graphql')
var app = express();
// 定义模型 修改 type不能丢 query相当与接口
const schema = buildSchema(`
  input AccountInput {
    name:String
    age:Int
    sex:String
    department:String
   }
  type Account {
    name:String
    age:Int
    sex:String
    department:String
   }
   type Mutation {
       createdAccount(input:AccountInput):Account
       updateAccount(id:ID,input:AccountInput):Account
   }
   type Query {
       accounts:[Account]
   }
    `)
// 模拟定义一个数据库
const fakedDb = {}
// 定义修改对应的处理器
const root = {
    accounts: () => {
        //因为定义的accounts值是数组形式,但是如果直接返回修改后的数据库数据,他是对象形式会报错所以对象转数组
        var arr = [];
        for (const key in fakedDb) {
            arr.push(fakedDb[key])
        }
        // 返回数据库所有数据
        return arr;
    },
    createdAccount: ({
        input
    }) => {
        // input拿到了Account的所有字段然后赋值给了fakedb对象 相当于数据库的数据保存
        fakedDb[input.name] = input;
        // 返回保存的结果
        return fakedDb[input.name]
    },
    // 更新数据
    updateAccount: ({
        id,
        input
    }) => {
        // 拿到数据库中的数据把input新属性赋值给他,使用object.assign吧第二三个的值copy给第一个,第一个值就有了二三的属性
        const updateAccount = Object.assign({}, fakedDb[id], input);
        // 数据库中的数据变为修改后的内容
        fakedDb[id] = updateAccount;
        return updateAccount;
    }
}
/* GET users listing. */
app.use('/graphql', graphqlHTTP({
    schema: schema,
    rootValue: root,
    graphiql: true
}));
app.listen(3002, () => {
    console.log("开启3002成功")
});
// 向外公开文件夹供用户访问静态资源index
app.use(express.static('public'))

结果:

graphql学习(二)
查询
graphql学习(二)
graphql学习(二)
注意:
在使用mutation时,schema中必须要有一个query,不然看不到schema
这种错误是没有在后面定义对应里面的参数值graphql学习(二)

这种错误,当时accounts定义的是数组,这里查询的需要的是数组,但是返回值的是对象,所以要把对象转为数组graphql学习(二)

相关标签: 接口