首页 > 其他分享 >GraphQL入门之分页查询

GraphQL入门之分页查询

时间:2024-03-19 13:58:32浏览次数:20  
标签:const 入门 args id 分页 GraphQL users email name

前一篇文章讲了怎么创建 GraphQL 的查询操作,今天在此基础上看看要实现一个简单的分页查询应该怎么做,顺便可以介绍一下 GraphQL 里的枚举类型和查询参数应该怎么用。

创建 Node.js 的工程

mkdir myapp
cd myapp
npm init (一路回车)

安装依赖包

npm install @apollo/server graphql

定义 Schema

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

type User {
  id: ID!
  name: String!
  email: String!
}

enum SortBy {
  name
  email
}

enum SortDirection {
  ASC
  DESC
}

type Query {
  users(
    sortBy: SortBy = name
    sort: SortDirection = ASC
    offset: Int = 0
    limit: Int = 10
  ): [User]
}

schema 文件主要包括:

  1. 定义类型:定义了一个User类型,包括 id, name 和 email 属性;定义了两个枚举类型,分别表示排序字段和排序类型。
  2. 定义查询操作:定义了一个列表查询操作,支持按指定字段和类型排序,并支持分页查询。

实现处理器

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

const users = [];
for (let i = 0; i < 100; i++) {
  users.push({id: i, name: 'user_' + i, email: 'user' + i + '@gmail.com'});
}

const resolvers = {
  Query: {
    users(obj, args, context, info) {
      let result = users.sort((a, b) => {
        const valueA = a[args.sortBy];
        const valueB = b[args.sortBy];
        if (valueA < valueB) {
          return -1;
        }
        if (valueA > valueB) {
          return 1;
        }
        return 0;
      });
      if (args.sort == "DESC") {
        result = result.reverse();
      }
      result = result.slice(args.offset, args.offset + args.limit);
      return result;
    },

  },
};

module.exports = resolvers;

处理器文件主要包括

  1. 准备测试数据:这里创建了一个 User 对象的数据组并初始化了几条数据。
  2. 定义处理函数:users(obj, args, context, info),其中 args 里包含了所有传递过来的参数。

主程序

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

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(`

标签:const,入门,args,id,分页,GraphQL,users,email,name
From: https://blog.csdn.net/kongxx/article/details/136828834

相关文章

  • cuda从入门到精通(六)共享内存和循环分块实现CUDA矩阵乘
    本文系转载,出处:https://mp.weixin.qq.com/s/1w1WFPoUEvVECsurqmvJDw在CUDA编程中,共享内存和循环分块(looptiling)是两种常见的优化策略,它们可以帮助我们提高矩阵乘法的性能。共享内存(SharedMemory):在GPU中,每个线程块(block)都有自己的共享内存。与全局内存相比,共享内存的访问......
  • python 小小入门2
    紧跟上章使用FinalShell1)mkdiraaa创建文件夹mkdir-p/aaa/bbb/ccc创建文件夹以及后续2)touch 例如touch1.txt也可touch1.txt2.txt3.txt以及touchfsd.sdad也可以创建如果已经有了touch1.txt再创建一个touch1.txt那么他不会覆盖以及删除原来的文件只......
  • FPGA入门笔记008——数码管动态扫描设计与验证
    #FPGA入门笔记008——数码管动态扫描设计与验证1、数码管动态扫描原理​ 8段数码管的结构图如图1所示:图1——8段数码管结构图(a为共阴极,b为共阳极)​ 对于共阴数码管需要给对应段以高电平才会使其点亮,而对于共阳极数码管则需要给低电平才会点亮。AC620上板载的是共阳极数......
  • AIGC之入门之详细介绍
    一、AIGC初识AIGC,即ArtificialIntelligenceGeneratedContent,指的是生成式人工智能。它可以通过处理人的自然语言,对AI下达指令任务,从而自动生成图片、视频、音频等内容。至于AIGC中的StableDiffusion,它可能指的是一种特定的生成模型或技术。StableDiffusion在AIGC领域中......
  • 黑客入门指南
    黑客入门指南......
  • 深入理解mysql 从入门到精通
    1.MySQL结构由下图可得MySQL的体系构架划分为:1.网络接入层2.服务层3.存储引擎层4.文件系统层1.网络接入层提供了应用程序接入MySQL服务的接口。客户端与服务端建立连接,客户端发送SQL到服务端,Java中通过JDBC来实现连接数据库。2.服务层管理工具和服务:系统管理和控......
  • 阿里云-零基础入门推荐系统 【排序模型+模型融合】
    文章目录学习过程赛题介绍评价方式理解赛题理解排序模型读取排序特征转化类型返回排序后的结果排序结果归一化LGB排序模型定义特征列排序模型分组排序模型定义排序模型训练lgb_ranker模型预测lgb_ranker预测结果重新排序及生成提交结果lgb_ranker五折交叉验证lgb_ranker......
  • Mybatis-Plus 快速入门
    快速入门地址:快速测试|MyBatis-Plus(baomidou.com)使用第三方组件:1、导入对应依赖2、研究依赖如何配置3、代码如何编写4、提高扩展技术能力步骤1、创建数据库mybatis_plus2、创建user表DROPTABLEIFEXISTS`user`;​CREATETABLE`user`( idBIGINTN......
  • Java 入门 - 常用的dos命令
    切换盘符盘符名:->回车查看当前路径下的文件或者文件夹dir进入指定文件夹下cd文件夹名字进入到多级文件夹下cd文件夹名字\文件夹名字退到上一级目录cd..或者cd..直接退到磁盘位置(退至根目录)cd\或者cd\清屏cls 退出黑窗口 exit......
  • 零基础小白如何入门HarmonyOS鸿蒙应用开发学习?
    HarmonyOS鸿蒙应用开发是当前非常热门的一个领域,许多人都想入门学习这个技术。但是,对于零基础的人来说,如何入门确实是一个问题。下面,我将从以下几个方面来介绍如何零基础入门HarmonyOS鸿蒙应用开发学习。一、了解HarmonyOS鸿蒙系统首先,我们需要了解HarmonyOS鸿蒙系统的一些......