GraphQL入门3(Mutation)
创建一个新的支持Mutation的Schema.
|
var GraphQLSchema = require('graphql').GraphQLSchema; var GraphQLObjectType = require('graphql').GraphQLObjectType; var GraphQLString = require('graphql').GraphQLString; var GraphQLList = require('graphql').GraphQLList; var buildSchema = require('graphql').buildSchema; var fetch = require('node-fetch'); require("babel-polyfill"); // Construct a schema, using GraphQL schema language var schema = buildSchema( ' input MessageInput {' + ' content: String' + ' author: String' + ' }' + '' + ' type Message {' + ' id: ID !' + ' content: String' + ' author: String' + ' }' + '' + ' type Query {' + ' getMessage(id: ID!): Message' + ' }' + '' + ' type Mutation {' + ' createMessage(input: MessageInput): Message' + ' updateMessage(id: ID!, input: MessageInput): Message' + ' }' ); // If Message had any complex fields, we'd put them on this object. class Message { constructor(id, {content, author}) { this.id = id; this.content = content; this.author = author; } } // Maps username to content var fakeDatabase = {}; var root = { getMessage: function ( { id }) { if (!fakeDatabase[id]) { throw new Error('no message exists with id ' + id); } return new Message(id, fakeDatabase[id]); }, createMessage: function ({input}) { // Create a random id for our "database". var id = require('crypto').randomBytes(10).toString('hex'); fakeDatabase[id] = input; return new Message(id, input); }, updateMessage: function ({id, input}) { if (!fakeDatabase[id]) { throw new Error('no message exists with id ' + id); } // This replaces all old data, but some apps might want partial update. fakeDatabase[id] = input; return new Message(id, input); } }; module.exports.Schema = schema; module.exports.Root = root; |
创建一个新的router来使用这个Schema:
|
var express = require('express'); var graphQLHTTP = require('express-graphql'); var schema = require('../schemas/Schema2').Schema; var root = require('../schemas/Schema2').Root; var router = express.Router(); router.use(graphQLHTTP({ schema: schema, rootValue: root, graphiql : true })); module.exports = router; |
客户端的测试代码如下:
app.js:
|
//Mutation var Test7 = require('./Test7'); Test7.Execute(); |
Test7.js
|
//Test7: Mutation var gRequest = require('graphql-request').request; var util = require('util'); exports.Execute = function () { var query = 'mutation CreateMessage($input: MessageInput) {' + ' createMessage(input: $input) {' + ' id,' + ' author,' + ' content' + ' }' + '}' ; var varibles1 = { "input": { "author": "Tom", "content": "this is my message" } }; //gRequest('http://localhost:1337/graphql/graphql', query).then(function (data) { console.log(data) }); gRequest('http://localhost:1337/graphql2/graphql', query, varibles1).then(function (data) { console.log(util.inspect(data, { showHidden: false, depth: null })) }); }; |
执行结果如下:
|
{ createMessage: { id: '48ed1228a3b390909365', author: 'Tom', content: 'this is my message' } } |
示例来自: https://graphql.org/graphql-js/mutations-and-input-types/
GraphQL入门3(Mutation)的更多相关文章
- GraphQL入门有这一篇就足够了
GraphQL入门有这一篇就足够了:https://blog.csdn.net/qq_41882147/article/details/82966783 版权声明:本文为博主原创文章,遵循 CC 4. ...
- Vue项目中GraphQL入门学习与应用
1.GraphQL是什么,能干什么? 正如官网所说,GraphQL是一种用于API查询的语言.Facebook 的移动应用从 2012 年就开始使用 GraphQL.GraphQL 规范于 2015 ...
- Graphql入门
Graphql入门 GraphQL是一个查询语言,由Facebook开发,用于替换RESTful API.服务端可以用任何的语言实现.具体的你可以查看Facebook关于GraphQL的文档和各种语言 ...
- GraphQL入门1
1. 资源: 主站: https://graphql.org/ 中文站: http://graphql.cn 入门视频: https://graphql.org/blog/rest-api-graph ...
- 《分享》Graphql入门与实践
最近项目用到了graphql,学习了一些并在公司做了一个小分享,希望对你有帮助 一.介绍 Graphql是一种面向数据的API查询语言 Graphql给前端提供一种强力的查询工具,我们可以根据自己定义 ...
- GraphQL 入门介绍
写在前面 GraphQL是一种新的API标准,它提供了一种更高效.强大和灵活的数据提供方式.它是由Facebook开发和开源,目前由来自世界各地的大公司和个人维护.GraphQL本质上是一种基于api ...
- GraphQL入门2
将服务器端的代码升级了一下: var GraphQLSchema = require('graphql').GraphQLSchema; var GraphQLObjectType = require ...
- [GraphQL] Apollo React Mutation Component
In this lesson I refactor a React component that utilizes a higher-order component for mutations to ...
- GraphQL快速入门教程
摘要: 体验神奇的GraphQL! 原文:GraphQL 入门详解 作者:MudOnTire Fundebug经授权转载,版权归原作者所有. GraphQL简介 定义 一种用于API调用的数据查询语言 ...
随机推荐
- LeetCode(52):N皇后 II
Hard! 题目描述: n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回 n 皇后不同的解决方 ...
- LeetCode(28): 实现strStr()
Easy! 题目描述: 实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0 ...
- Java集合(Collection)综述
1.集合简介 数学定义:一般地,我们把研究对象统称为元素.把一些元素组成的总体叫做集合. java集合定义:集合就是一个放数据的容器,准确的说是放数据对象引用的容器. java中通用集合类存放于jav ...
- splay好板子
找到一份比较好的板子,链接https://blog.csdn.net/crazy_ac/article/details/8034190 #include<cstdio> #include& ...
- bind函数详解(转)
var name = "The Window"; var object = { name: "My Object", getNameFunc: function ...
- JQuery中jsCharts图表插件(十)
一:1.jsCharts图表插件 注意:从官方下来的例子都没指定页面编码,在这种情况下,浏览器就会使用默认设置中文编码:GB2312,GBK等:导致无法执行. 请在html代码中的<head&g ...
- ORACLE分页查询SQL语法——高效的分页
--1:无ORDER BY排序的写法.(效率最高)--(经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!) SELECT * FROM (SELECT ...
- .NetCore源码阅读笔记系列之HttpAbstractions(五) Authentication
说道认证&授权其实这块才是核心,这款跟前面Security这块有者紧密的联系,当然 HttpAbstractions 不光是认证.授权.还包含其他Http服务和中间价 接下来先就认证这块结合前 ...
- ZOJ - 3471
壮压水一水,刚开始脑残了非要开两维dp... #include<cstdio> #include<cstring> #include<algorithm> #def ...
- printf的执行顺序
printf()函数的参数,在printf()函数读取时是从左往右读取的,然后将读取到的参数放到栈里面去, 最后读取到的就放在栈顶,处理参数的时候是从栈顶开始的,所以是从右边开始处理的. --prin ...