前言
Deno 是一个由 Node.js 的创始人 Ryan Dahl 开发的新型运行时环境,它在很多方面都比 Node.js 更加优秀,例如有更好的安全性、更好的模块化支持、更好的性能等等。而 GraphQL 是一种用于 API 的查询语言,它可以让客户端精确地获取它需要的数据,从而减少了不必要的数据传输,提高了性能。本文将介绍如何在 Deno 中使用 GraphQL 进行数据查询和操作。
安装依赖
在使用 GraphQL 之前,我们需要安装一些依赖:
import { Application, Router } from "https://deno.land/x/oak/mod.ts"; import { applyGraphQL, gql } from "https://deno.land/x/oak_graphql/mod.ts"; import { MongoClient } from "https://deno.land/x/mongo/mod.ts";
oak
是 Deno 中非常流行的 Web 框架,它提供了一些方便的 API 用于处理 HTTP 请求和响应。oak_graphql
是 oak 框架中的 GraphQL 中间件,它可以将 GraphQL 请求转发到 GraphQL 服务器上。mongo
是 Deno 中连接 MongoDB 数据库的模块,我们将使用它来操作数据库。
编写 GraphQL Schema
在使用 GraphQL 之前,我们需要定义一个 GraphQL Schema,它描述了我们的数据模型以及可用的查询和操作。下面是一个简单的例子:
-- -------------------- ---- ------- ----- -------- - ---- ---- ---- - --- --- ----- ------- ------ ------- - ---- ----- - ----------- ----- ---- --------- ------- - ---- -------- - ---------------- -------- ------ --------- ----- -------------- ---- ----- -------- ------ --------- ----- -------------- ----- ----- - --
在这个例子中,我们定义了一个 User
类型,它有三个字段:id
、name
和 email
。我们还定义了三个查询:getUser
、getUsers
和 Mutation
,它们用于获取、创建、更新和删除用户。
实现 GraphQL Resolver
在定义好 GraphQL Schema 之后,我们需要实现一些 Resolver 函数来处理查询和操作。下面是一个简单的例子:
-- -------------------- ---- ------- ----- --------- - - ------ - -------- ----- --- ---- - -- -- ---- -------- ---- ----- ---- -- - ----- ---- - ----- ---------------------------------------- ---- ------------ --- ------ ----- -- --------- ----- --- ---- --- ---- -------- ---- ---- ---- -- - ----- ----- - ----- -------------------------------------- ------ ---------------- -- -- --------- - ----------- ----- --- ---- - ----- ----- -- ---- -------- ---- ---- ---- -- - ----- ---- - - ----- ----- -- ----- - ---- - - ----- ----------------------------------------------- ------- - ----- ------ ----- -- ----------- ----- --- ---- - --- ----- ----- -- ---- -------- ---- ---- ---- -- - ----- ---- - ----- ------------------------------------------------ - ---- ------------ -- - ----- - ----- ----- - -- - --------------- ------- -- -- ------ ----------- -- ----------- ----- --- ---- - -- -- ---- -------- ---- ---- ---- -- - ----- ---- - ----- ------------------------------------------------- ---- ------------ --- ------ ----------- -- -- --
在这个例子中,我们实现了四个 Resolver 函数,它们对应了我们在 GraphQL Schema 中定义的四个查询和操作。这些函数都接受四个参数:_
、__
、context
和 ___
。其中 _
和 __
分别代表查询和操作的参数,context
代表上下文对象,___
代表查询和操作的元数据。
创建 GraphQL 应用
在实现好 Resolver 之后,我们需要创建一个 GraphQL 应用,并将我们的 Resolver 注入到应用中。下面是一个简单的例子:
-- -------------------- ---- ------- ----- --- - --- -------------- ----- ------ - --- --------- ----- -- - ----- --- --------------------------------------------------- ----- ------- - - -- -- ----- -------------- - ----- -------------- ------- ------- --------- --------- ---------- ---------- -------- -------- --- -------------------------------- --------------------------------- ----- ------------ ----- ---- ---
在这个例子中,我们创建了一个 MongoClient
实例来连接 MongoDB 数据库,并将它存储在上下文对象中。然后我们使用 applyGraphQL
函数创建了一个 GraphQL 服务,并将它绑定到 oak 框架中的路由上。最后我们启动了 oak 应用,开始监听 8000 端口。
测试 GraphQL 应用
在启动好 oak 应用之后,我们可以使用任何支持 GraphQL 的客户端来测试我们的应用。下面是一个简单的例子:
-- -------------------- ---- ------- -------- - ---------------- -------- ------ -------------------- - -- ---- ----- - - ----- - -------- - -- ---- ----- - - -------- - -------------- --------------------------- ----- -------- ------ -------------------- - -- ---- ----- - - -------- - -------------- --------------------------- - -- ---- ----- - -
在这个例子中,我们使用了三个不同的查询和操作来测试我们的 GraphQL 应用。第一个是创建用户,它接受两个参数:name
和 email
,并返回创建的用户对象。第二个是获取所有用户,它不接受任何参数,并返回一个包含所有用户的数组。第三个是更新用户,它接受三个参数:id
、name
和 email
,并返回更新后的用户对象。最后一个是删除用户,它接受一个参数:id
,并返回被删除的用户对象。
总结
在本文中,我们介绍了如何在 Deno 中使用 GraphQL 进行数据查询和操作。我们首先安装了需要的依赖,然后定义了一个 GraphQL Schema,实现了一些 Resolver 函数,创建了一个 GraphQL 应用,并测试了它的功能。这些内容对于想要学习和使用 Deno 和 GraphQL 的开发人员来说都非常有价值。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6615edf3d10417a2225cf258