GraphQL 是一种用于 API 的查询语言,它不仅可以规定查询,还可以规定返回结果的形式。与传统的 RESTful API 相比,GraphQL 灵活性更高,数据传输效率更高。
Deno 是一种现代的 TypeScript 运行时,可以用来构建后端和前端应用程序,它与 Node.js 相比,具有更高的性能、更好的稳定性和更多的安全性。
在本文中,我们将探讨如何在 Deno 中使用 GraphQL。
安装 GraphQL
在 Deno 中使用 GraphQL,我们首先需要安装相应的库。 为此,我们可以使用 Deno 的模块管理器 deno.land/x
,在终端中输入以下命令:
deno install -qAf --unstable https://deno.land/x/graphql/mod.ts
创建 GraphQL 服务器
成功安装 GraphQL 后,我们就可以开始构建 GraphQL 服务器了。
在 Deno 中,我们可以使用 Oak 框架来构建 GraphQL 服务器。Oak 是一个基于中间件的框架,可以实现复杂的 HTTP 处理逻辑。
为了使用 Oak 框架,我们需要在 Deno 中安装相应的库。在终端中输入以下命令:
deno install -qAf --unstable https://deno.land/x/oak/mod.ts
然后,我们可以创建一个名为 server.ts
的文件,在其中实现一个简单的 GraphQL 服务器:
import { Application } from "https://deno.land/x/oak/mod.ts"; import { applyGraphQL, gql } from "https://deno.land/x/graphql/mod.ts"; const app = new Application(); const types = gql` type Query { hello: String! } `; const resolvers = { Query: { hello: () => 'Hello World!' } }; const GraphQLService = await applyGraphQL({ typeDefs: types, resolvers: resolvers, }); app.use(GraphQLService.routes(), GraphQLService.allowedMethods()); console.log('Now listening: http://localhost:8000/graphql'); await app.listen({ port: 8000 });
在上述代码中,我们首先从 Oak 和 GraphQL 库中导入需要的模块。然后,我们定义一个简单的 GraphQL 查询,用于返回一个字符串“Hello World!”。
最后,我们创建了一个 GraphQL 服务,并使用 Oak 框架将 GraphQL 服务和端口 8000
关联起来。 运行 deno run --allow-net server.ts
后,在浏览器中打开 http://localhost:8000/graphql
,我们就可以看到 GraphQL Playground 页面了。
在左侧的编辑器中,我们可以输入 GraphQL 查询语句,并在右侧的窗口中获得查询结果。 在这种情况下,我们可以在编辑器中键入以下查询:
query { hello }
运行查询后,我们将得到以下结果:
{ "data": { "hello": "Hello World!" } }
集成 MongoDB 数据库
在 Deno 中使用 MongoDB 数据库,我们可以使用第三方的库 mongo
。它是一个基于 Promise 的 MongoDB 驱动程序,具有简单、清晰的 API。
在终端中输入以下命令,以安装 mongo
库:
deno install -qAf --unstable https://deno.land/x/mongo/mod.ts
然后我们可以集成 MongoDB 数据库的功能到我们的 GraphQL 服务器中。在下面的示例中,我们将创建一个 users
集合,其中包含一些用户对象。我们还将实现一个简单的 GraphQL 查询,用于返回用户列表。让我们来看一下代码:
import { Application } from "https://deno.land/x/oak/mod.ts"; import { applyGraphQL, gql } from "https://deno.land/x/graphql/mod.ts"; import { MongoClient } from "https://deno.land/x/mongo/mod.ts"; const app = new Application(); const types = gql` type User { id: String! name: String! } type Query { users: [User!]! } `; const resolvers = { Query: { users: async () => { const client = new MongoClient(); await client.connect("mongodb://localhost:27017"); const db = client.database("users"); const users = db.collection('users'); return await users.find({}); } } }; const GraphQLService = await applyGraphQL({ typeDefs: types, resolvers: resolvers, }); app.use(GraphQLService.routes(), GraphQLService.allowedMethods()); console.log('Now listening: http://localhost:8000/graphql'); await app.listen({ port: 8000 });
在上述代码中,我们定义了一个名为 User
的 GraphQL 类型,其中包括一个用户的 id
和 name
字段。我们还定义了一个名为 users
的查询,用于从 MongoDB 数据库中获取所有用户。
我们使用 mongo
库中的 MongoClient
类,与 MongoDB 数据库建立连接,并指定待操作的数据库和集合。 最后,我们返回了从数据库中获取的所有用户。
总结
在本文中,我们介绍了如何在 Deno 中使用 GraphQL。首先,我们从 Deno 的模块管理器 deno.land/x
安装了相关库。 然后,我们使用 Oak 框架和 applyGraphQL 函数创建了一个 GraphQL 服务器。我们还演示了如何将 MongoDB 集成到 GraphQL 服务器中,从而实现更复杂的数据操作。
虽然本文只提供了解决方案的示例代码,但它可以作为学习和使用 GraphQL 的入门指南。随着你的知识和技能的增长,你可以在 Deno 中构建更高级和更复杂的 GraphQL 服务器。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a4bc23add4f0e0ffd0f71e