前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GraphQL学习第五篇 -GraphQl 中定义schema实现增、删、改、查。

GraphQL学习第五篇 -GraphQl 中定义schema实现增、删、改、查。

作者头像
越陌度阡
发布2020-11-26 12:25:11
7440
发布2020-11-26 12:25:11
举报
代码语言:javascript
复制
const DB = require('../model/db.js');

const {
    GraphQLObjectType,
    GraphQLString,
    GraphQLInt,
    GraphQLList,
    GraphQLSchema,
    GraphQLID,
    GraphQLFloat,
    GraphQLNonNull
} = require('graphql')

// 1.定义导航的schema,映射要操作表的字段
var NavSchema = new GraphQLObjectType({
    name: 'nav',
    fields: {
        _id: { type: GraphQLString },
        title: {type: GraphQLString}, 
        url: {type: GraphQLString},
        sort: {type: GraphQLInt},
        status: {type: GraphQLString},
        add_time: {type: GraphQLString}
    }
})

// 2.1.定义一个根,配置查询的方法
var RootSchema = new GraphQLObjectType({
    name: 'root',
    fields: {
        navList: {
            type: GraphQLList(NavSchema),
            async resolve(parent, args) {
                var navList = await DB.find('nav', {});
                return navList;
            }
        },
        oneNavList: {
            type: NavSchema,
            args: {
                _id: {type: GraphQLString}
            },
            async resolve(parent, args) {
                var oneNavList = await DB.find('nav', { "_id": DB.getObjectId(args._id)});
                return oneNavList[0];
            }
        }
    }
})

// 2.2.定义一个根,配置增加、修改、删除的方法
var MutationSchema=new GraphQLObjectType({
    name:"mutation",
    fields:{
        // 添加的方法
        addNav:{
            // 数据类型
            type:NavSchema,
            // 接收的参数
            args:{
                title: {type: new GraphQLNonNull(GraphQLString)},
                url: {type: GraphQLNonNull(GraphQLString)},
                sort: {type: GraphQLInt},
                status: {type: GraphQLString},
                add_time: {type: GraphQLString}
            },
            // 操作的方法
            async resolve(parent, args) {
                var result = await DB.insert('nav', {
                    title:args.title,
                    url:args.url,
                    sort:args.sort,
                    status:args.status,
                    add_time:new Date().getTime()
                });
                return result.ops[0];
            }
        },
        // 编辑的方法
        editNav:{
            type:NavSchema,
            args:{
                // GraphQLNonNull代表必传字段
                _id:{type: new GraphQLNonNull(GraphQLString)},
                title: {type: new GraphQLNonNull(GraphQLString)},     
                url: {type: GraphQLNonNull(GraphQLString)},
                sort: {type: GraphQLInt},
                status: {type: GraphQLString},
                add_time: {type: GraphQLString}
            },
            async resolve(parent, args) {
                await DB.update('nav', {"_id":DB.getObjectId(args._id)},{
                    title:args.title,
                    url:args.url,
                    sort:args.sort,
                    status:args.status,
                    add_time:new Date().getTime()
                });
                return {
                    _id:args._id,
                    title:args.title,
                    url:args.url,
                    sort:args.sort,
                    status:args.status,
                    add_time:new Date().getTime()
                }
            }
        },
        deleteNav:{
            type:NavSchema,
            args:{
                _id:{type: new GraphQLNonNull(GraphQLString)},
            },
            async resolve(parent, args) {
                var oneNavList = await DB.find('nav', { "_id": DB.getObjectId(args._id)});
                var deleteResult = await DB.remove('nav', {"_id":DB.getObjectId(args._id)});
                // 用影响的行业来判断是否成功
                if(deleteResult.result.n){
                    return oneNavList[0];  
                }else{
                    return {}
                }
            }
        }  
    }
})

// 3.将定义的所有的根,挂载到GraphQLSchema上
module.exports = new GraphQLSchema({
    query: RootSchema,
    mutation:MutationSchema
})
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/01/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档