5. Apollo Server
4m
您目前正在本课程的较旧版本中。 查看课程变更日志.

🛠 后端第一步

在后端,我们的第一个目标是创建一个能够:

  1. 接收来自 我们的客户端
  2. 验证针对我们新创建的模式
  3. 使用模拟数据填充查询模式
  4. 返回填充的作为响应

Apollo Server库帮助我们快速、轻松地实现此服务器,并采用面向生产的方式。

注意:在本课程中,我们使用 3。如果您需要参考 Apollo 文档在学习课程时,请确保您使用的是 v3 文档集!

server/src/ 文件夹,打开 index.js

要创建服务器,我们将使用前面安装的 apollo-server 包。在此包中,我们只需要命名的导出 ApolloServer,因此我们将用大括号声明该常量。就在下面,我们将从 schema.js 文件中导入我们的 typeDefs

const { ApolloServer } = require("apollo-server");
const typeDefs = require("./schema");

接下来,我们将创建 ApolloServer 类的实例,并将其 typeDefs 传递到其选项对象中:

const server = new ApolloServer({ typeDefs });

注意:我们使用暗示键的简写属性表示法,因为我们已使用匹配键(typeDefs)为我们的常量命名。

最后,要启动它,我们将调用异步 listen 方法。当它解析时,它会记录一条漂亮的小消息,让我们知道我们的服务器确实已启动并正在运行:

server.listen().then(() => {
console.log(`
🚀 Server is running!
🔉 Listening on port 4000
📭 Query at https://127.0.0.1:4000
`);
});

保存更改。从终端,我们将使用 我们的服务器 npm run start(确保你在 server/ 文件夹中)。

我们收到了日志消息,除此之外...就没有太多东西了!我们有一个正在运行的服务器,但仅此而已。浮动在 localhost 空间的真空中,无法访问任何数据,目前来说这是一个悲伤而孤独的服务器。 😿

以下哪些是 GraphQL 服务器的目的?

尽管我们的服务器尚未连接到任何 ,但能够向服务器发送测试 并获得有效的响应将是一件很棒的事。幸运的是,ApolloServer提供了一种使用 来执行该操作的方法。

要启用 模拟数据,我们可以向 构造函数提供 :mocks:true

const server = new ApolloServer({
typeDefs,
mocks: true,
});

这会指示 使用一个占位符值(例如 字段的 "Hello World")填充每个查询的架构

不过,Hello World对于曲目标题或作者图片的 URL 来说并不是一个非常现实的值!为服务器提供接近真实情况的模拟数据,我们应该传递一个 属性,而不是仅仅传递 true。该对象包含函数,提供了模拟数据,这些数据就是我们希望服务器为每次查询的 返回的数据。

下面是我们的 对象:

const mocks = {
Track: () => ({
id: () => "track_01",
title: () => "Astro Kitty, Space Explorer",
author: () => {
return {
name: "Grumpy Cat",
photo:
"https://res.cloudinary.com/dety84pbu/image/upload/v1606816219/kitty-veyron-sm_mctf3c.jpg",
};
},
thumbnail: () =>
"https://res.cloudinary.com/dety84pbu/image/upload/v1598465568/nebula_cat_djkt9r.jpg",
length: () => 1210,
modulesCount: () => 6,
}),
};

该对象为 对象(包括它所包含的 对象)的所有 定义了模拟值。我们将此对象传递给 构造函数,如下所示:

const server = new ApolloServer({
typeDefs,
mocks,
});

启用 mocks 后,始终为每个 返回正好两个条目。
要一次获得更多条目(比如说 6 个),我们将其中的一个 Query.tracksForHome 添加到我们的 mocks 对象并返回一个给定长度的数组,如: [...new Array(6)]

const mocks = {
Query: () => ({
tracksForHome: () => [...new Array(6)],
}),
Track: () => ({
id: () => "track_01",
title: () => "Astro Kitty, Space Explorer",
author: () => {
return {
name: "Grumpy Cat",
photo:
"https://res.cloudinary.com/dety84pbu/image/upload/v1606816219/kitty-veyron-sm_mctf3c.jpg",
};
},
thumbnail: () =>
"https://res.cloudinary.com/dety84pbu/image/upload/v1598465568/nebula_cat_djkt9r.jpg",
length: () => 1210,
modulesCount: () => 6,
}),
};
关于在未连接数据源的情况下查询 Apollo Server,以下哪些说法是正确的?
编码挑战!

创建一个模拟对象,类型为 SpaceCatid 为 spacecat_01,title 为“spacecat pioneer”

现在,服务器加载了模拟数据,我们如何在其中运行 来测试一切是否按预期工作?在下一课中,我们将使用 Apollo Studio Explorer 轻松构建并运行测试查询。

上一个

分享你的问题和对此课程的意见

你的反馈有助于我们提升!如果你遇到问题或感到困惑,请告诉我们,我们会帮助你解决。所有评论都是公开的,必须遵循 Apollo 行为准则。请注意,已解决或已处理的评论可能会被删除。

你需要一个 GitHub 帐户才能在下面发帖。没有帐户? 改为在我们的 Odyssey 论坛中发帖。