指南与教程 - 背景图片 | Rainy Design Studio

Strapi 开发指南

RainyMay 30, 2026

本文章的版权归属 Rainy Design Studio - 雨点设计工作室 ,且最终解释权归站长所有。
除本站自媒体官号以外,本文的内容禁止任一组织、个人、账号或平台,以任何形式转载到 RainyDesign.cn 站外。
任何个人或组织进行非法转载的,本站工作人员可对其追究法律责任。

具体信息详见 条例与条款

Strapi 指南

一、前言

1.1 文档背景

本人有随手记录知识点的习惯,比如在遇见一些问题的时候顺手记录错误与解决方案等等。想想存着也是存着,提供课程之余也顺便发出来分享给宝子们;而且课程指南由于具备实效性,编辑起来非常麻烦,但是大体流程在后续版本更新中变更也不大,所以干脆放在这里统一管理更新后适用的知识点。

本文会不定期更新,具体请以最新内容为准;当前内容适配的版本是 Strapi v5 。
搜索文章内容请按下键盘上的Ctrl(Mac为Command) + F查找,
收藏文章请按下键盘上的Ctrl / Command + D加入书签栏。

本文档的完善程度较低,于未来的一段时间内仍有较大改动,敬请期待。

二、知识点

2.1 页面简介

页面名称英文功能与说明
主页Home欢迎、指南、事项、最后编辑、数据指标等
内容管理器Content Manager管理创建的各项数据结构中的内容
媒体库Media Library存储静态内容,它们都会被存放到项目下的 /public/uploads 目录中
内容类型构建器Content-Type Builder管理数据结构,仅在开发模式下(yarn run develop)可用,用于管理数据结构与接口
部署DeployStrapi 提供了官方付费托管方案,不过我们也可以用 CLI 自行部署,具体下述
插件广场MarketplaceStrapi 官方社区有很多适配版本的插件,可在这里查阅并安装
设置Settings管理各项设置

2.2 数据类型

类型取值高级设置提示
Text任意文字--
Boolean布尔值--
Rich text (Blocks)基于 JSON 输出的富文本块--
JSONJSON--
Number浮点,整数--
EmailEmail--
Date日期--
Password密码--
Media图片,视频,音频,文件--
Enumeration列表--
Relation关联一项数据--
UID专有识别内容--
Rich text (Markdown)基于 Markdown 输出的富文本块--
Component组件 | - | - |
Dynamic Zone选择一组可自由调用的选项,供页面弹性搭配 | - | - |

2.3 常用过滤操作符

操作符描述示例
$eq等于(默认)filters[title][$eq]=Hello
$ne不等于filters[title][$ne]=Hello
$lt小于filters[id][$lt]=10
$lte小于等于filters[id][$lte]=10
$gt大于filters[id][$gt]=5
$gte大于等于filters[id][$gte]=5
$in包含在数组中filters[category][name][$in][0]=tech&filters[category][name][$in][1]=news
$notIn不包含filters[category][name][$notIn][0]=draft
$contains包含子串filters[title][$contains]=Next
$notContains不包含子串filters[title][$notContains]=test
$startsWith以...开始filters[slug][$startsWith]=guide
$endsWith以...结束filters[slug][$endsWith]=tutorial
$null为空filters[publishedAt][$null]=true
$notNull不为空filters[publishedAt][$notNull]=true

2.4 分页参数详解

参数描述示例
pagination[page]页码(从1开始)pagination[page]=1
pagination[pageSize]每页条数pagination[pageSize]=10
pagination[start]起始位置pagination[start]=0
pagination[limit]限制条数pagination[limit]=10

三、故障排查

3.1 常见错误

启动相关错误:

  • ⠸ Loading Strapi[ERROR] There seems to be an unexpected error, try again with --debug for more information

    • 解决方案: 使用 yarn develop --debugnpm run develop -- --debug 获取详细错误信息
    • 常见原因: 数据库连接失败、端口被占用、依赖包版本冲突
  • Error: listen EADDRINUSE: address already in use :::1337

    • 解决方案: 端口被占用,使用 lsof -i :1337 查找占用进程,或修改 .env 中的 PORT 配置
  • Module not found: Can't resolve '@strapi/design-system'

    • 解决方案: 删除 node_modulespackage-lock.json,重新安装依赖
    rm -rf node_modules package-lock.json npm install

数据库相关错误:

  • ER_ACCESS_DENIED_ERROR: Access denied for user

    • 解决方案: 检查 .env 中的数据库用户名密码,确保用户有足够权限
    • 权限检查: 用户需要 CREATE, ALTER, DROP, SELECT, INSERT, UPDATE, DELETE 权限
  • Database connection error: Unknown database

    • 解决方案: 手动创建数据库,或确保 Strapi 用户有创建数据库的权限
    CREATE DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol

    • 解决方案: MySQL 8.0 认证问题,需要修改用户认证方式
    ALTER USER 'your_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; FLUSH PRIVILEGES;

3.2 常见问题

  • Q: 我要修改 Strapi 连接的数据库,以及其用户名与密码,可我不知道它在哪里

    • 在 Strapi 项目的根目录下有一个 .env 文件,除了配置连接数据库以及账号密码以外,服务器的 ip 与端口,以及数据库的客户端类型、ip、端口与开关 SSL 连接都是在这里配置的。
  • Q: 如何修改 Strapi 的数据库连接配置?

    • A: 编辑项目根目录下的 .env 文件,修改以下配置:
    DATABASE_CLIENT=mysql DATABASE_HOST=127.0.0.1 DATABASE_PORT=3306 DATABASE_NAME=your_database_name DATABASE_USERNAME=your_username DATABASE_PASSWORD=your_password DATABASE_SSL=false
  • Q: 如何更改 Strapi 的默认端口?

    • A: 在 .env 文件中添加或修改:
    PORT=1338 HOST=0.0.0.0
  • Q: 忘记了管理员密码怎么办?

    • A: 可以通过数据库直接重置,或使用以下命令:
    yarn run strapi admin:reset-user-password --email=admin@example.com # 或使用 npm npm run strapi admin:reset-user-password --email=admin@example.com

3.3 API 报错

错误编码错误名称错误信息解决方案 & 说明
400ValidationErrorInvalid key [Key name]检查 API 请求中的字段名是否正确,确认数据结构定义
400ValidationErrorThis attribute must be unique唯一字段重复,检查 UID 或设置为唯一的字段值
400ApplicationErrorRelation not found关联数据不存在,检查关联的 ID 是否有效
401UnauthorizedErrorMissing or invalid credentialsAPI Token 缺失或无效,检查请求头中的 Authorization
403ForbiddenErrorForbidden权限不足,在 Settings → Users & Permissions Plugin → Roles 中检查相应权限
403PolicyErrorPolicy failed自定义策略阻止了请求,检查相关策略配置
404NotFoundErrorNot Found数据不存在或未发布,检查:1. ID 是否正确 2. 数据是否已发布 3. 权限设置
413PayloadTooLargeErrorRequest entity too large上传文件过大,检查 body-parser 配置和服务器限制
429TooManyRequestsErrorToo many requests请求频率过高,实施请求限制或增加延迟
500ApplicationErrorAn error occurred during route generation路由生成错误,通常是数据结构配置问题
500DatabaseErrorDatabase connection failed数据库连接失败,检查数据库服务和连接配置

3.4 性能和优化问题

常见性能问题:

  • Q: API 响应慢?

    • A: 检查以下几点:
      1. 使用 populate 时避免过深的嵌套
      2. 使用 fields 参数只获取需要的字段
      3. 合理使用分页参数
      4. 为常用查询字段添加数据库索引
  • Q: 内存占用过高?

    • A:
      1. 检查是否有内存泄漏
      2. 优化图片上传大小
      3. 使用 CDN 存储媒体文件
      4. 定期清理日志文件

最佳实践建议:

// ❌ 不推荐:获取所有数据和关联 const badQuery = '/api/articles?populate=*'; // ✅ 推荐:只获取需要的字段和关联 const goodQuery = '/api/articles?fields[0]=title&fields[1]=slug&populate[author][fields][0]=name&pagination[pageSize]=10';

(未完待续...)

如需返回主课程,请 点击此处 回到相关页面。

订阅

解锁深度且前沿的前端技术、设计理念与用户交互探寻之道。