博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GraphQL入门3(Mutation)
阅读量:7126 次
发布时间:2019-06-28

本文共 2885 字,大约阅读时间需要 9 分钟。

创建一个新的支持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' } }

 

示例来自:   

转载地址:http://ghhel.baihongyu.com/

你可能感兴趣的文章
POJ2449 第K短路
查看>>
【最小割】【网络流24题】【P2762】 太空飞行计划问题
查看>>
Mysql触发器示例
查看>>
解决Asp.net中的Chart控件运行出现错误提示“ ChartImg.axd 执行子请求时出错”
查看>>
PHPExcel类导出xlsx文件 提示格式不兼容 低版本excel软件打不开 解决方案
查看>>
Android开发规范
查看>>
心已落定,入驻博客园
查看>>
paper 84:机器学习算法--随机森林
查看>>
Python自动化运维之26、Web框架本质、MVC与MTV
查看>>
样式表的样式
查看>>
雨燕框架启动流程
查看>>
spring,mapper的参数
查看>>
Java通过NIO实现快速文件拷贝的代码
查看>>
怎么样启用红米手机5的ROOT权限
查看>>
Hdoop日记Day10---RPC机制
查看>>
基于.NET的WebSocket实例:在线聊天室
查看>>
jdk8u144安装在centos7上
查看>>
每个java初学者都应该搞懂的问题
查看>>
集合Set、List、Map的遍历方法
查看>>
2017《JAVA技术》预备作业
查看>>