前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GraphQL入门之一对多关联查询

GraphQL入门之一对多关联查询

作者头像
kongxx
发布2024-03-20 14:38:47
810
发布2024-03-20 14:38:47
举报

创建 Node.js 的工程

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

安装依赖包

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

定义 Schema

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

代码语言:javascript
复制
type Book {
  title: String!
  author: Author!
}

type Author {
  name: String!
  books: [Book!]!
}

type Query {
  books: [Book]
  authors: [Author]
}

schema 文件主要包括:

  1. 定义了一个一对多关系的两个类型:Book 和 Author。
  2. 定义了查询操作:Book 和 Author 列表。

实现处理器

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

代码语言:javascript
复制
const book1 = {title: 'book1'};
const book2 = {title: 'book2'};
const book3 = {title: 'book3'};
const author1 = {name: 'author1', books: [book1]};
const author2 = {name: 'author2', books: [book2, book3]};
book1.author = author1;
book2.author = author2;
book3.author = author2;

const books = [book1, book2, book3];
const authors = [author1, author2];

const resolvers = {
  Query: {
    books: () => books,
    authors: () => authors,
  },
};

module.exports = resolvers;

处理器文件主要包括:

  1. 初始化了一些一对多关联的测试数据
  2. 定义处理函数,这里不做什么特殊处理,直接返回两个列表即可

主程序

创建 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
复制
query GetBooksAndAuthors {
  books {
    title,
    author {
      name
    }
  }
  authors {
    name
    books {
      title
    }
  }
}
  1. 执行查询操作的时候,可以指定关联对象的属性,比如:在查询 books 列表的时候,可以指定关联的 author 只返回那些属性;同样在查询 authors 列表的时候,可以指定关联的 books 列表中只返回 book 的哪些属性。
  2. 这里如果我们不指定关联对象的属性,在执行查询的时候会报错,有兴趣的话,大家可以试试看报的是啥错。

查询结果

代码语言:javascript
复制
{
  "data": {
    "books": [
      {
        "title": "book1",
        "author": {
          "name": "author1"
        }
      },
      {
        "title": "book2",
        "author": {
          "name": "author2"
        }
      },
      {
        "title": "book3",
        "author": {
          "name": "author2"
        }
      }
    ],
    "authors": [
      {
        "name": "author1",
        "books": [
          {
            "title": "book1"
          }
        ]
      },
      {
        "name": "author2",
        "books": [
          {
            "title": "book2"
          },
          {
            "title": "book3"
          }
        ]
      }
    ]
  }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-19,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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