概述
我们的模式已经很完善了,但我们需要一个 服务器 来真正使用它来满足它接收的请求!
在本课中,我们将
- 设置Apollo Server
🛠 后端第一步
在后端,我们的首要目标是创建一个 GraphQL 服务器 可以:
- 接收来自客户端的 GraphQL 查询。
- 根据我们新创建的模式验证 查询。
- 用模拟数据填充查询到的模式 字段。
- 将填充的 字段 作为响应返回。
Apollo Server 库帮助我们快速、轻松地以生产就绪的方式实现此服务器。
添加服务器依赖项
要开始使用我们的服务器,我们首先需要几个包@apollo/server
、 graphql
和 graphql-tag
。
-
@apollo/server
包提供了一个完整的、符合规范的 GraphQL 服务器。 -
graphql
包提供了解析和验证 GraphQL 查询的核心逻辑。 -
graphql-tag
包提供了gql
模板字面量,我们将在稍后使用它。
在项目根目录中打开一个新的终端,运行以下命令
npm install @apollo/server graphql graphql-tag
这些包负责我们项目启动和运行所需的所有 GraphQL 相关配置。
实现 Apollo Server
在 src
文件夹中,打开 index.ts
。
我们将从一些导入开始。要创建我们的服务器,我们将使用之前安装的 @apollo/server
包。从该包中,我们将导入 ApolloServer
。我们还需要使用 startStandaloneServer
函数,我们可以从 @apollo/server/standalone
包中导入。
import { ApolloServer } from "@apollo/server";import { startStandaloneServer } from "@apollo/server/standalone";
要引入 schema.graphql
的内容,我们需要一些额外的导入。
import { readFileSync } from "fs";import path from "path";import { gql } from "graphql-tag";
我们将同时使用 readFileSync
和 path
实用程序来读取 schema.graphql
文件的内容。我们导入的 gql
实用程序是一个标记模板字面量,用于包装 GraphQL 字符串,例如我们即将导入的模式定义!这将 GraphQL 字符串转换为 Apollo 库在处理 操作 和模式时预期的格式,并且它还支持语法高亮。
在这些导入下方,我们将添加一行,将所有这些导入组合在一起并读取我们的模式文件。
const typeDefs = gql(readFileSync(path.resolve(__dirname, "./schema.graphql"), {encoding: "utf-8",}));
接下来,让我们设置一个名为 startApolloServer
的 async
函数。在其中,我们将创建 ApolloServer
类的实例,并将我们的 typeDefs
传递到它的选项对象中:
async function startApolloServer() {const server = new ApolloServer({ typeDefs });}
注意: 我们正在使用隐式键的简写属性表示法,因为我们用匹配的键(typeDefs
)命名了我们的常量。
要启动服务器,我们将使用 startStandaloneServer
函数,并将我们刚刚初始化的 server
传递给它。
async function startApolloServer() {const server = new ApolloServer({ typeDefs });startStandaloneServer(server);}
startStandaloneServer
函数返回一个 Promise
,因此我们将 await
该调用的结果,并将 url
属性从结果中提取出来。
async function startApolloServer() {const server = new ApolloServer({ typeDefs });const { url } = await startStandaloneServer(server);}
我们还将记录一条简单的消息,让我们知道我们的服务器确实启动并运行了!
async function startApolloServer() {const server = new ApolloServer({ typeDefs });const { url } = await startStandaloneServer(server);console.log(`🚀 Server is running!📭 Query at ${url}`);}
最后,别忘了在文件底部实际调用 startApolloServer
函数!
startApolloServer();
保存您的更改。从终端,我们将 启动 我们的服务器,使用 npm run dev
。
我们得到了日志消息,以及……除此之外没有别的!我们有一个运行的服务器,但仅此而已。它漂浮在 localhost
空间的真空之中,无法访问任何数据,它现在是一个悲伤而孤独的服务器。 😿
🚀 Server is running!📭 Query at https://127.0.0.1:4000/
即使我们的服务器还没有连接到任何 数据源,我们仍然可以向它发送一个测试 查询 并得到一个有效的响应;让我们在下一课中研究一下。
练习
关键要点
- Apollo Server 是一个库,我们可以用它来接收 GraphQL 查询、验证它们、填充请求的 字段 并将数据返回给客户端。
- 我们可以通过传入我们的 GraphQL 类型定义来初始化一个新的 Apollo Server 实例。
接下来
让我们使用一些模拟数据试用一下我们的服务器。在下一课中,我们将探索一个开发环境,它为我们提供了进入 GraphQL API 所需的一切。
分享您对此课的疑问和评论
本课程目前处于
您需要一个 GitHub 帐户才能在下方发布。没有帐户? 请在我们的 Odyssey 论坛中发布。