GraphQL 是一种用于 API 的查询语言和运行时环境,它旨在更高效、更强大和更易于理解。本文将介绍如何在 Deno 中使用 GraphQL 完成数据库操作。
前置知识
- 了解 GraphQL 的基本概念
- 熟悉 Deno 中的模块编程
准备工作
- 安装 Deno,安装 GraphQL 模块。
$ deno install --allow-net --allow-read https://deno.land/x/graphql/mod.ts
创建 GraphQL Server
-- -------------------- ---- ------- ------ - -------- -------------- ------------------ -------------- --------------- - ---- ------------------------------------- ----- ------ - --- --------------- ------ --- ------------------- ----- -------- ------- - ------ - ----- -------------- ----- - ----- - ----- --- ------------------------------ -- -- -------- ------ ---- ----- ---- -------- ---- -- ------- --------------- -- -- --- --- ----- ------ - ----- -------- ------- - ----- - ----------- -------- - -- -- --------------------
运行后可以看到输出 Hello, world!
连接数据库
接下来我们将用 Deno 操作数据库进行增删改查操作。这里我们选择使用 Deno 中的 mongodb 模块作为操作数据库的工具。安装方法如下:
$ deno install --unstable --allow-net https://deno.land/x/mongodb/mongo.ts
创建数据库连接:
import { MongoClient } from "https://deno.land/x/mongodb/mod.ts"; const client = new MongoClient(); await client.connect("mongodb://localhost:27017"); const db = client.database('mydb') const books = db.collection('books')
创建 GraphQL Schema
我们将使用 GraphQL 实现对 MongoDB 数据库的增删改查操作。我们需要定义 GraphQL Schema 来定义数据模型和操作模型。一个简单的 Book 类型可如下定义:
-- -------------------- ---- ------- ----- -------- - --- ------------------- ----- ------- ------- -- -- -- ---- ------ --- ------------------------- -- ------ ------ --- ----------------------------- -- ------- ------ --- ----------------------------- -- ----- ------ ------------- -- ------------ - ----- -------------- -- --
定义 Query 用来查询数据:
-- -------------------- ---- ------- ----- ------------- - --- ------------------- ----- -------- ------- - ------ - ----- --- ---------------------- -------- ----- -------- ---- ----- ---- -------- ---- -- - ----- ----- - ----- ---------------------- ------ ----- - -- ----- - ----- --------- ----- - --- - ----- --------- - -- -------- ----- -------- ---- ----- ---- -------- ---- -- - ----- ---- - ----- --------------- ---- - ----- ------- - -- ------ ---- - - - --
定义 Mutation 用来增删改数据:
-- -------------------- ---- ------- ----- ---------------- - --- ------------------- ----- ----------- ------- - -------- - ----- --------- ----- - ------ - ----- --- ----------------------------- -- ------- - ----- --- ----------------------------- -- ----- - ----- ------------- -- ------------ - ----- ------------- - -- -------- ----- -------- ---- ----- ---- -------- ---- -- - ----- ------------ - ----- --------------------- ------ ----- --------------- ---- ----------------------- -- - -- ----------- - ----- --------- ----- - --- - ----- --- ------------------------- -- ------ - ----- --- ----------------------------- -- ------- - ----- --- ----------------------------- -- ----- - ----- ------------- -- ------------ - ----- ------------- - -- -------- ----- -------- ---- ----- ---- -------- ---- -- - ----- ----------------- ---- - ----- ------- - -- ------ ----------- ------ ----- --------------- ---- - ----- ------- - -- - -- ----------- - ----- -------------- ----- - --- - ----- --- ------------------------- -- -- -------- ----- -------- ---- ----- ---- -------- ---- -- - ----- - ------------ - - ----- --------------------- ------ ---------- --------------- --- -- - ----- --- ------------- -------- - ------ ----- ---- -- ---------- --- ------- ------------- - - - --
我们需要将 Query 和 Mutation 合并成一个 Schema:
const schema = new GraphQLSchema({ query: RootQueryType, mutation: RootMutationType })
现在我们已经准备就绪了,可以使用 graphql()
函数来测试我们的查询和操作了:
-- -------------------- ---- ------- ----- ------ - ----- -------- ------- - -------- - -------------- -------- ------- ---------- ----- --------- - --- ----- ------ ---- - - - -- ------------------- ----- ------------ - ----- -------- ------- - -------- - -------------- ----------------------------- - - -- -------------------------
总结
本文介绍了如何在 Deno 中使用 GraphQL 实现对 MongoDB 数据库的增删改查操作。在实际项目中,我们可以使用这种技术来构建安全、高效且易于维护的 Web 应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ad1da548841e9894944fd2