许多应用需要处理身份验证和用户偏好设置的会话。Node.js Express 框架附带基于内存的实现可实现此功能。但此实现不适用于可以通过多个实例提供的应用,因为各实例之间记录的会话可能不同。本教程介绍如何在 App Engine 上处理会话。
目标
- 编写应用。
- 在本地运行应用。
- 在 App Engine 上部署应用。
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
您可使用价格计算器根据您的预计使用情况来估算费用。
完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理。
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Firestore API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Firestore API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
设置项目
在终端窗口中,从您选择的目录启动,并创建一个名为
sessions
的新目录。本教程的所有代码均位于sessions
目录内。切换到
sessions
目录:cd sessions
初始化
package.json
文件:npm init .
安装依赖项:
npm install \ --save @google-cloud/connect-firestore @google-cloud/firestore express express-session
在本教程结束时,最终文件结构类似于以下内容:
sessions
├── app.yaml
├── index.js
└── package.json
编写 Web 应用
此应用为每位用户显示不同语言的问候语。回访用户始终会收到同一种语言的问候语。
在应用存储用户偏好设置之前,您需要存储会话中当前用户的相关信息。此示例应用使用 Firestore 来存储会话数据。
您可以使用与 express-session
兼容的会话存储 connect-firestore
。
在终端窗口中,使用以下内容创建名为
index.js
的文件:
下图说明了 Firestore 如何处理 App Engine 应用的会话。
设置 app.use(session)
之后,每个请求都有一个 req.session
属性用于标识周期性用户。会话数据存储在 Firestore 中。
删除会话
Connect-firestore
不会删除旧的或已过期的会话。您可以在 Google Cloud 控制台中删除会话数据,也可以实施自动删除策略。如果您为会话使用 Memcache 或 Redis 等存储解决方案,系统会自动删除已过期的会话。
在本地运行
在终端窗口中,安装 Google Cloud 项目的依赖项:
npm install
启动 HTTP 服务器:
npm start
查看网络浏览器中的应用:
Cloud Shell
在 Cloud Shell 工具栏中,点击 Web 预览 ,然后选择在端口 8080 上预览。
本地机器
在浏览器中,转到
http://localhost:8080
您会看到五个问候语之一:“Hello World”、“Hallo Welt”、“Hola mundo”、“Salut le Monde”或“Ciao Mondo”。如果您使用其他浏览器或无痕模式打开网页,语言会更改。您可以在 Google Cloud 控制台中查看和修改会话数据。
要停止 HTTP 服务器,请在终端窗口中按
Control+C
。
在 App Engine 上部署并运行
通过 App Engine 标准环境,您可以构建和部署在繁重负载和大量数据的压力下仍能可靠运行的应用。
本教程使用 App Engine 标准环境来部署服务器。
在您的终端窗口中,创建一个
app.yaml
文件并复制以下内容:在 App Engine 上部署应用:
gcloud app deploy
输入以下网址,查看正在运行的应用:
https://PROJECT_ID.REGION_ID.r.appspot.com
请替换以下内容:
PROJECT_ID
:您的 Google Cloud 项目 IDREGION_ID
:App Engine 分配给您的应用的代码
现在,问候语由在 App Engine 实例上运行的 Web 服务器提供。
调试应用
如果您无法连接到 App Engine 应用,请检查以下内容:
- 检查
gcloud
部署命令是否已成功完成,并且未输出任何错误。如果存在错误(例如message=Build failed
),修复问题,然后再次尝试部署 App Engine 应用。 在 Google Cloud 控制台中,转到日志浏览器页面。
在最近选择的资源下拉列表中,点击 App Engine 应用,然后点击所有 module_id。您将看到访问您的应用时的请求列表,如果您未发现请求列表,请确认您是否已从下拉列表中选择所有 module_id。如果您看到 Google Cloud 控制台输出的错误消息,请检查您的应用代码是否与“编写 Web 应用”相关部分中的代码匹配。
确保已启用 Firestore API。
清理
删除项目
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
删除 App Engine 实例
- In the Google Cloud console, go to the Versions page for App Engine.
- Select the checkbox for the non-default app version that you want to delete.
- 如需删除应用版本,请点击 删除。
后续步骤
- 试用更多 Cloud Functions 教程。
- 详细了解 App Engine。
- 试用 Cloud Run,该平台可让您在完全托管式环境或您的自定义 Google Kubernetes Engine 集群中运行无状态容器。