创建一个新的支持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. hdu1556 树状数组区间更新单点查询板子

    就是裸的区间更新: 相对于直观的线段树的区间更新,树状数组的区间更新原理不太相同:由于数组中的一个结点控制的是一块区间,当遇到更新[l,r]时,先将所有能控制到 l 的结点给更新了,这样一来就是一下子 ...

  2. Extjs MVC模式开发,循序渐进(一)

    本文讲述extjs mvc的Helloworld,tabPanel,event,页面布局layout等内容. 本页包含:MVC模式案例(一)~MVC模式案例(六),从搭建extjs mvc到点击按钮生 ...

  3. JavaScript: 认识 Object、原型、原型链与继承。

    目录 引用类型与对象 类与对象 成员组成 成员访问 实例方法 / 属性 引用类型与对象 JavaScript 存在着两种数据类型:"基本数据类型" 与 "引用数据类型&q ...

  4. Unix/Linux中/usr目录的由来

    在Linux系统中,有一个很重要的目录——/usr目录.关于这个目录名称的由来,网上主要有下面几种说法: user的缩写 User Shareable Read-only的缩写 Unix/User S ...

  5. python全栈开发day49-jquery的位置信息、事件流、事件对象,事件委托,事件绑定和解绑

    一.昨日内容回顾    1. jQuery的属性操作 1) html属性操作:attr 2) DOM属性操作:prop 3) 类样式操作:addClass.removeClass.toggleClas ...

  6. 6-2 铁轨 uva 514

    较为简单的stack题目 但是还是犯了一些错误: 1. 要想清空栈,直接重新定义较为方便! 2.在if(s.top()==x)时  加上  !s.empty()  否则程序会崩溃 3. 必须要加上i- ...

  7. npm ERR! errno 1 npm ERR! chromedriver@2.35.0 install: `node install.js`

    在使用webpack+vue-cli进行vue项目构建时可能会出现一下错误,webpack@3.10.0及以上版本和vue-cli@2.9.2及以上版本会自动安装依赖(我在自己电脑上测试是这样的)不用 ...

  8. Python3 Srcapy 爬虫

    最近一直在理论学习,没有时间写博客.今天来一波Python爬虫,为机器学习做数据准备. 爬虫配置环境 Anaconda3 + Spyder + Scrapy Anaconda 安装就不绍了,网上很多. ...

  9. 在Spring中配置SQL server 2000

    前言 Lz主要目的是在Spring中配置SQL server 2000数据库,但实现目的的过程中参差着许多SQL server 2000的知识,也包罗在本文记载下来!(Lz为什么要去搞sql serv ...

  10. Django 学习第一天——django 基本介绍和环境搭建

    web 应用设计模式(MTV MVC): MTV: M:models 模型:负责业务数据对象与数据库对象: T:templates 模板:负责如何把数据展示给用户: V:views 视图:负责业务逻辑 ...