在 Deno 中如何使用 GraphQL?

GraphQL 是一种用于 API 的查询语言,它不仅可以规定查询,还可以规定返回结果的形式。与传统的 RESTful API 相比,GraphQL 灵活性更高,数据传输效率更高。

Deno 是一种现代的 TypeScript 运行时,可以用来构建后端和前端应用程序,它与 Node.js 相比,具有更高的性能、更好的稳定性和更多的安全性。

在本文中,我们将探讨如何在 Deno 中使用 GraphQL。

安装 GraphQL

在 Deno 中使用 GraphQL,我们首先需要安装相应的库。 为此,我们可以使用 Deno 的模块管理器 deno.land/x,在终端中输入以下命令:

创建 GraphQL 服务器

成功安装 GraphQL 后,我们就可以开始构建 GraphQL 服务器了。

在 Deno 中,我们可以使用 Oak 框架来构建 GraphQL 服务器。Oak 是一个基于中间件的框架,可以实现复杂的 HTTP 处理逻辑。

为了使用 Oak 框架,我们需要在 Deno 中安装相应的库。在终端中输入以下命令:

然后,我们可以创建一个名为 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 库:

然后我们可以集成 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 类型,其中包括一个用户的 idname 字段。我们还定义了一个名为 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


纠错反馈