创建一个新的支持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)的更多相关文章

  1. GraphQL入门有这一篇就足够了

    GraphQL入门有这一篇就足够了:https://blog.csdn.net/qq_41882147/article/details/82966783 版权声明:本文为博主原创文章,遵循 CC 4. ...

  2. Vue项目中GraphQL入门学习与应用

    1.GraphQL是什么,能干什么? 正如官网所说,GraphQL是一种用于API查询的语言.Facebook 的移动应用从 2012 年就开始使用 GraphQL.GraphQL 规范于 2015 ...

  3. Graphql入门

    Graphql入门 GraphQL是一个查询语言,由Facebook开发,用于替换RESTful API.服务端可以用任何的语言实现.具体的你可以查看Facebook关于GraphQL的文档和各种语言 ...

  4. GraphQL入门1

    1. 资源: 主站: https://graphql.org/ 中文站: http://graphql.cn 入门视频: https://graphql.org/blog/rest-api-graph ...

  5. 《分享》Graphql入门与实践

    最近项目用到了graphql,学习了一些并在公司做了一个小分享,希望对你有帮助 一.介绍 Graphql是一种面向数据的API查询语言 Graphql给前端提供一种强力的查询工具,我们可以根据自己定义 ...

  6. GraphQL 入门介绍

    写在前面 GraphQL是一种新的API标准,它提供了一种更高效.强大和灵活的数据提供方式.它是由Facebook开发和开源,目前由来自世界各地的大公司和个人维护.GraphQL本质上是一种基于api ...

  7. GraphQL入门2

    将服务器端的代码升级了一下: var GraphQLSchema = require('graphql').GraphQLSchema; var GraphQLObjectType = require ...

  8. [GraphQL] Apollo React Mutation Component

    In this lesson I refactor a React component that utilizes a higher-order component for mutations to ...

  9. GraphQL快速入门教程

    摘要: 体验神奇的GraphQL! 原文:GraphQL 入门详解 作者:MudOnTire Fundebug经授权转载,版权归原作者所有. GraphQL简介 定义 一种用于API调用的数据查询语言 ...

随机推荐

  1. Tronado

    Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效 ...

  2. 【mysql】autocommit=0后,commit, rollback无效

    之前在[mysql]MySQLdb中的事务处理中用autocommit和commit()以及rollback()实现了事务处理. 但后来,用同样的代码在另一个数据库中运行却失败了.找了一个下午的原因. ...

  3. python 全栈开发,Day140(RabbitMQ,基于scrapy-redis实现分布式爬虫)

    一.RabbitMQ 队列 在生产者消费模型中,比如去餐馆吃饭的例子.生产者相当于厨师,队列相当于服务员,消费者就是你. 我们必须通过服务员,才能吃饭! 如果队列满了,队列会一直hold住.必须让消费 ...

  4. 开始写博客,学习Linq(4)

    应该是可以敲代码了,Linq是.NET Framework3.5的功能,该版本的框架同时发布了新增的和更新了得类库,也为C#和VB.NET语言提供了新版本的编译器.Linq的功能支持源于编译器和类库, ...

  5. [APIO2011]方格染色

    题解: 挺不错的一道题目 首先4个里面只有1个1或者3个1 那么有一个特性就是4个数xor为1 为什么要用xor呢? 在于xor能把相同的数消去 然后用一般的套路 看看确定哪些值能确定全部 yy一下就 ...

  6. python全栈开发day22-常用模块二(hashlib、configparse、logging)

    一.昨日内容回顾 1.钻石继承 #新式类,本身或父类显示继承object #找名字的时候是广度优先顺序 #有mro方法,super方法, # super并不是单纯的找父类,和mro顺序是完全对应的 # ...

  7. Codeforces 1102F Elongated Matrix 状压dp

    Elongated Matrix 预处理一下两两之间的最小值, 然后直接dp. #include<bits/stdc++.h> #define LL long long #define f ...

  8. Codeforces Round #392 (Div. 2)-D. Ability To Convert

    D - Ability To Convert 题目大意:给你一个数字 n 接下来再输入一个数字 w(<10^60),表示w这个数字是 n 进制的, 并且超过十进制也用数字表示,这样就有多种组合了 ...

  9. 10.Django用户认证组件

    用户认证组件: 功能:用session记录登录验证状态: 前提:用户表,django自带的auth_user 创建超级用户:python manage.py createsuperuser       ...

  10. Flutter常用组件(Widget)解析-ListView

    一个可滚动的列表组件 不管在哪,列表组件都尤为重要和常用. 首先来看个例子: import 'package:flutter/material.dart'; void main () => ru ...