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

posted on 2018-07-13 17:18  今夜太冷  阅读(5506)  评论(0编辑  收藏  举报