前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GraphQL入门之变更(Mutation)操作

GraphQL入门之变更(Mutation)操作

作者头像
kongxx
发布2024-03-21 09:08:42
840
发布2024-03-21 09:08:42
举报

前面几篇文章都是说的查询(Query)操作,这一篇讲一下变更操作。还是老样子,看一个简单的例子。

创建 Node.js 的工程

代码语言:javascript
复制
mkdir myapp
cd myapp
npm init (一路回车)

安装依赖包

代码语言:javascript
复制
npm install @apollo/server graphql

定义 Schema

创建 schema.graphql 文件,内容如下:

代码语言:javascript
复制
type User {
    id: ID!
    name: String!
    email: String!
}

type Query {
    users: [User],
}

type Mutation {
  createUser(name: String!, email: String!) : User!
}

schema {
  query: Query
  mutation: Mutation
}

schema 文件主要包括:

  1. 定义模型对象:定义了一个User对象,包括 id, name 和 email 属性。
  2. 定义查询操作:定义了一个查询操作,返回所有用户数组。
  3. 定义变更操作:这里只定义了一个创建用户的变更操作,接收两个参数name和email,返回新创建的 User 对象。

实现处理器

创建 resolvers.js 文件,内容如下:

代码语言:javascript
复制
const user1 = {id: 1, name: 'user1', email: 'user1@gmail.com'};
const user2 = {id: 2, name: 'user2', email: 'user2@gmail.com'};
const user3 = {id: 3, name: 'user3', email: 'user3@gmail.com'};
const users = [user1, user2, user3];

const resolvers = {
  Query: {
    users: () => users,
  },

  Mutation: {
    createUser(obj, args, context, info) {
      let user = {id: users.length + 1,name: args.name, email: args.email};
      users.push(user);
      return user;
    }
  }
};

module.exports = resolvers;

处理器文件主要包括

  1. 准备测试数据:这里创建了一个 User 对象的数据组并初始化了几条数据。
  2. 定义查询处理函数:users:返回上面初始化的 User 数组。
  3. 定义变更处理函数:创建一个新的 User 对象,并添加到列表中,同时作为返回值返回。其中 args 里包含了所有传递过来的参数,这里就是name和email。

主程序

创建 server.js 文件,内容如下:

代码语言:javascript
复制
const { ApolloServer } =  require('@apollo/server');
const { startStandaloneServer } = require('@apollo/server/standalone');
const fs = require("fs");

const typeDefs = fs.readFileSync('./schema.graphql').toString();
const resolvers = require('./resolvers');

const server = new ApolloServer({
  typeDefs,
  resolvers,
});

startStandaloneServer(server).then(function(data) {
  console.log(`🚀 Server ready at ${data.url}`);
});

测试

启动服务

代码语言:javascript
复制
node server.js

服务启动后,访问 http://localhost:4000 进行测试。

变更操作

变更请求

代码语言:javascript
复制
mutation createUser($name: String!, $email: String!) {
  createUser(name: $name, email: $email) {
    id,
    name,
    email
  }
}

变更请求参数

代码语言:javascript
复制
{
  "name": "newuser",
  "email": "newuser@gmail.com"
}

变更返回结果,返回新创建的 User 对象

代码语言:javascript
复制
{
  "data": {
    "createUser": {
      "id": "4",
      "name": "newuser",
      "email": "newuser@gmail.com"
    }
  }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建 Node.js 的工程
  • 安装依赖包
  • 定义 Schema
  • 实现处理器
  • 主程序
  • 测试
    • 启动服务
      • 变更操作
      相关产品与服务
      腾讯云服务器利旧
      云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档