Skip to content
标签
strapi
headless-cms
nodejs
api
字数
1006 字
阅读时间
5 分钟

背景

需求:需要一个简单的图片上传接口,但不想为此专门搭建一个完整的后端项目。

之前接触过 Strapi,号称是“前端开发一大利器”,可以快速生成安全可靠的后端 API。趁此机会,深入学习并记录一下。

一句话总结 Strapi:一个开源的、可定制的 Headless CMS 框架,能让你通过图形化界面快速构建和管理 API。

官网:strapi.io

快速上手

初次接触可以跟随官方文档或相关教程做一个简单的 Demo,以了解其基本工作流程。 参考教程:新手入坑:strapi官网教程的简单示例学习

核心配置与概念

1. 数据库配置

Strapi 默认使用 SQLite 数据库,数据文件位于项目根目录下的 .tmp/data.db(默认被 .gitignore 忽略)。对于生产环境,通常需要更换为 MySQL, PostgreSQL 等数据库。

配置 MySQL 数据库:

  1. 在你的 MySQL 服务中创建一个新的数据库。
  2. 安装 Strapi 的 MySQL 数据库连接器:
    shell
    npm install strapi-connector-bookshelf
    npm install mysql
  3. 修改或创建 config/database.js 文件:
    javascript
    module.exports = ({ env }) => ({
      connection: {
        client: 'mysql',
        connection: {
          host: env('DATABASE_HOST', '127.0.0.1'),
          port: env.int('DATABASE_PORT', 3306),
          database: env('DATABASE_NAME', 'strapi_db'),
          user: env('DATABASE_USERNAME', 'strapi_user'),
          password: env('DATABASE_PASSWORD', 'strapi_password'),
          ssl: env.bool('DATABASE_SSL', false),
        },
        pool: {
          min: 0,
          max: 10,
        }
      },
    });

    建议使用环境变量来管理敏感信息。

重启服务后,Strapi 会在指定的数据库中自动创建所需的表结构。原有的 SQLite 数据不会被迁移。

数据库表结构

2. HTTP 请求

通过 Content-Type Builder 创建集合类型(Collection Type)后,Strapi 会自动生成一套完整的 RESTful API。你可以在 Roles & Permissions 设置中开放对应接口的公共访问权限。

HTTP 请求说明

对于关联(Relation)字段的更新(POST/PUT),只需传入关联项的 ID 即可。根据关系类型(一对一/一对多),字段值的类型为 numbernumber[]

3. 路由配置

Strapi 的 API 路由定义在 api/{collection-type}/config/routes.json 文件中。你可以在这里自定义路由。

路由配置

  • method: HTTP 请求方法 (GET, POST, PUT, DELETE 等)。
  • path: 请求路径。
  • handler: 处理该请求的 Controller 方法。例如,Post.find 指向 api/post/controllers/Post.js 中的 find 方法。

关键实践:实现图片上传

一个常见的误区是尝试通过自定义一个集合类型来实现文件上传。但 Strapi 的 Content API 不支持 multipart/form-data 类型的请求,因此无法通过这种方式上传文件。

相关讨论见 GitHub Issue: POST multipart/form-data on generated API for file upload

正确方法:使用 Strapi 内置的 Upload 插件

Upload 插件使用步骤

  1. 找到 Upload 插件的 API 端点: 该插件提供了一个开箱即用的 /upload 端点用于处理文件上传。 Upload 插件位置

  2. 开放上传权限: 在 Settings -> Roles -> Public 中,找到 Upload 插件,并勾选 upload 权限。 开放 Upload 权限

  3. 发起 POST 请求

    • URL: POST http://<your-strapi-url>/upload
    • Body: 使用 form-data 格式。
      • files: 选择你要上传的文件。这是一个必需的字段。
      • (可选) ref: 关联模型的名称 (e.g., restaurant)。
      • (可选) refId: 关联模型实例的 ID。
      • (可选) field: 关联模型中存储该文件的字段名。

    配置 Body 参数

  4. 成功响应: 上传成功后,API 会返回一个包含文件信息的 JSON 数组。 成功返回数据

默认情况下,上传的文件会存储在项目的 public/uploads 目录下,并通过 Strapi 服务对外提供访问。

参考

贡献者

The avatar of contributor named as jiechen jiechen

页面历史

撰写