热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

constDBrequire(..modeldb.js);const{GraphQLObjectType,GraphQLString,GraphQLInt,GraphQLList,

const DB = require('../model/db.js');const {GraphQLObjectType,GraphQLString,GraphQLInt,GraphQLList,GraphQLSchema,GraphQLID,GraphQLFloat,GraphQLNonNull
} = require('graphql')// 定义导航的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}}
})// 定义一个根,配置查询的方法
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];}}}
})// 定义一个根,配置增加、修改、删除的方法
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 {}}}} }
})// 将定义的所有的根,挂载到GraphQLSchema上
module.exports = new GraphQLSchema({query: RootSchema,mutation:MutationSchema
})


推荐阅读
  • 使用 Babylon.js 实现地球模型与切片地图交互(第三部分)
    本文继续探讨在上一章节中构建的地球模型基础上,如何通过自定义的 `CameraEarthWheelControl` 类来实现更精细的地图缩放控制。我们将深入解析该类的实现细节,并展示其在实际项目中的应用。 ... [详细]
  • ED Tree HDU4812 点分治+逆元
    这道题非常巧妙!!!我们进行点分治的时候,算出当前子节点的所有子树中的节点,到当前节点节点的儿子节点的距离,如下图意思就是当前节点的红色节点,我们要求出红色节点的儿子节点绿色节点, ... [详细]
  • 本文详细介绍了Oracle RMAN中的增量备份机制,重点解析了差异增量和累积增量备份的概念及其在不同Oracle版本中的实现。通过对比两种备份方式的特点,帮助读者选择合适的备份策略。 ... [详细]
  • 详解MyBatis二级缓存的启用与配置
    本文深入探讨了MyBatis二级缓存的启用方法及其配置细节,通过具体的代码实例进行说明,有助于开发者更好地理解和应用这一特性,提升应用程序的性能。 ... [详细]
  • 本文介绍了两个重要的Node.js库——cache-content-type和mime-types,它们在处理HTTP响应头时非常有用。cache-content-type是基于mime-types构建的,并且实现了缓存机制以提高性能。 ... [详细]
  • index.js全部js兼容性处理。js内引入babelpolyfill全部js兼容性处理。babelpolyfillimportbabelpolyfill;constadd ... [详细]
  • 深入解析C++ Atomic编程中的内存顺序
    在多线程环境中,为了防止多个线程同时修改同一数据导致的竞争条件,通常会使用内核级同步对象,如事件、互斥锁和信号量等。然而,这些方法往往伴随着高昂的上下文切换成本。本文将探讨如何利用C++11中的原子操作和内存顺序来优化多线程编程,减少不必要的开销。 ... [详细]
  • 本文详细介绍了Objective-C中的面向对象编程概念,重点探讨了类的定义、方法的实现、对象的创建与销毁等内容,旨在帮助开发者更好地理解和应用Objective-C的面向对象特性。 ... [详细]
  • 本文介绍了一个基本的同步Socket程序,演示了如何实现客户端与服务器之间的简单消息传递。此外,文章还概述了Socket的基本工作流程,并计划在未来探讨同步与异步Socket的区别。 ... [详细]
  • 本文深入探讨了领域驱动设计(DDD)中的聚合概念及其在事件溯源架构中的应用。聚合是一组紧密相关的类,这些类作为一个整体运作,形成一个有明确边界的组织。只有通过聚合根才能与聚合内的对象进行交互。 ... [详细]
  • This article explores the process of integrating Promises into Ext Ajax calls for a more functional programming approach, along with detailed steps on testing these asynchronous operations. ... [详细]
  • 题面:P3178[HAOI2015]树上操作好像其他人都嫌这道题太容易了懒得讲,好吧那我讲。题解:第一个操作和第二个操作本质上是一样的&# ... [详细]
  • 在AngularJS中,有时需要在表单内包含某些控件,但又不希望这些控件导致表单变为脏状态。例如,当用户对表单进行修改后,表单的$dirty属性将变为true,触发保存对话框。然而,对于一些导航或辅助功能控件,我们可能并不希望它们触发这种行为。 ... [详细]
  • 本文详细介绍了如何在PHP中使用Memcached进行数据缓存,包括服务器连接、数据操作、高级功能等。 ... [详细]
  • 2022年4月15日的算法练习题,包括最长公共子序列和线段树的应用。 ... [详细]
author-avatar
蜗蜗家的逆时针
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有