创建一个新的支持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/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2016-07-13 C++ RegCreateKeyEx成功了,但是注册表并没有这一项
2016-07-13 导出DLLRegisterServer接口遇到的问题