Strapi 是一个开源的、可定制化的无头 CMS。
这个指南将构建一个包装函数,用于连接 Strapi 和 Astro。
在开始之前,你需要准备以下内容:
- Astro 项目 - 如果你还没有 Astro 项目,我们的安装指南将帮助你快速入门;
- Strapi CMS 服务器 - 你可以在本地环境中设置 Strapi 服务器。
为了将 Strapi URL 添加到 Astro 中,你可以在项目的根目录中创建一个 .env
文件(如果还没有的话),并添加以下变量:
现在,你可以在你的 Astro 项目中使用这个环境变量了。
如果你希望为环境变量使用 IntelliSense,可以在 src/
目录下创建一个 env.d.ts
文件,并像这样配置 ImportMetaEnv
:
你的根目录现在应该包含了新的文件:
目录src/
- .env
- astro.config.mjs
- package.json
在 lib/strapi.ts
中创建一个新文件,并添加以下包装函数来与 Strapi API 进行交互:
该函数需要一个具有以下属性的对象:
endpoint
- 要获取的端点;
query
- 要添加到 URL 末尾的查询参数;
wrappedByKey
- 用于包装你 Response
对象中的 data
键;
wrappedByList
- 一个参数,用于“解封” Strapi 返回的列表,并只返回第一项。
如果你使用 TypeScript,可以基于以下 Article 接口来创建 src/interfaces/article.ts
,用于响应 Strapi 的内容类型:
目录src/
目录interfaces/
目录lib/
- env.d.ts
- .env
- astro.config.mjs
- package.json
-
更新你的首页 src/pages/index.astro
,用以展示一个博客文章列表,当中的每篇文章都有描述和链接到自己页面。
-
导入包装函数和接口。添加以下 API 调用来获取你的文章并返回一个列表:
该 API 调用请求会从 http://localhost:1337/api/articles
获取数据,并返回 articles
,这是一个表示数据的 JSON 对象数组:
- 使用 API 返回的
articles
数组中的数据,并在列表中展示你的 Strapi 博客文章。这些文章将链接到它们各自的页面,在下一步中你将创建这些页面。
创建文件 src/pages/blog/[slug].astro
来为每篇文章动态生成页面。
目录src/
目录interfaces/
目录lib/
目录pages/
- env.d.ts
- .env
- astro.config.mjs
- package.json
在 Astro 的默认静态模式(SSG)中,使用 getStaticPaths()
从 Strapi 获取文章列表。
接着,使用每个文章对象的属性来创建每个页面的模板。
如果你选择了 SSR 模式 并设置了 output: server
或 output: hybrid
,那么可以使用以下代码来生成你的动态路由。
创建 src/pages/blog/[slug].astro
文件:
这个文件将从 Strapi 获取并呈现与动态的 slug
参数相匹配的页面数据。
由于你在将重定向到 /404
,请在 src/pages
中创建一个 404 页面:
如果找不到文章,用户将被重定向到这个 404 页面,并会收到来自一只可爱猫猫的问候。
要部署你的网站,请访问我们的部署指南,并按照你偏好的托管提供商的说明操作。
如果你的项目使用 Astro 的默认静态模式,你需要设置一个 Webhook,在内容发生变化时触发新的构建。如果你使用 Netlify 或 Vercel 作为托管提供商,你可以使用其 Webhook 功能从 Strapi 触发新的构建。
在 Netlify 中设置 Webhook:
- 进入你的网站控制面板,点击 Build & deploy;
- 在 Continuous Deployment 标签下,找到 Build hooks 部分,点击 Add build hook;
- 为你的 Webhook 提供一个名称,并选择要触发构建的分支。点击 Save 并复制生成的 URL。
在 Vercel 中设置 Webhook:
- 进入你的项目控制面板,点击 Settings;
- 在 Git 标签下,找到 Deploy Hooks 部分;
- 为你的 Webhook 提供一个名称和要触发构建的分支。点击 Add 并复制生成的 URL。
按照Strapi Webhook 指南在 Strapi 管理面板中创建一个 Webhook。
更多 CMS 指南