在 Strapi 中,2 个中间件概念共存:
./config/middlewares.js
文件用于定义 Strapi 服务器应应用的所有全局中间件。
仅应用 ./config/middlewares.js
中存在的中间件。加载中间件按特定的 加载顺序 进行,每个中间件都有一些 命名约定 和 可选配置。
Strapi 使用内置的内部中间件预填充 ./config/middlewares.js
文件,这些中间件都有自己的 配置选项。
加载顺序
./config/middlewares.js
文件导出一个数组,其中顺序很重要并控制中间件堆栈的执行顺序:
js
./config/middlewares.js
js
module.exports = [
// 该数组已预先填充内部、内置中间件,前缀为 `strapi::`
'strapi::logger',
'strapi::errors',
'strapi::security',
'strapi::cors',
// 不需要任何配置的自定义中间件
'global::my-custom-node-module',
// 自定义名称以查找包或路径
{
name: 'my-custom-node-module',
config: {
foo: 'bar',
},
},
// 自定义解析以查找包或路径
{
resolve: '../some-dir/custom-middleware',
config: {
foo: 'bar',
},
},
// 内部中间件的自定义配置
{
name: 'strapi::poweredBy',
config: {
poweredBy: 'Some awesome company',
},
},
// 其余内部和内置中间件
'strapi::query',
'strapi::body',
'strapi::session',
'strapi::favicon',
'strapi::public',
]
如果您不确定将中间件放在堆栈中的什么位置,请将其添加到列表末尾。
命名约定
全局中间件可以根据其来源分为不同类型,这定义了以下命名约定:
中间件类型 | 来源 | 命名约定 |
---|---|---|
内部 | 内置中间件(即包含在 Strapi 中),自动加载 | strapi::middleware-name |
应用程序级别 | 从 ./src/middlewares 文件夹加载 | global::middleware-name |
API 级别 | 从 ./src/api/[api-name]/middlewares 文件夹加载 | api::api-name.middleware-name |
插件 | 从插件接口的 middlewares 属性中的 strapi-server.js 导出 | plugin::plugin-name.middleware-name |
外部 | 可以是:
| - 由于它们是直接从配置文件中配置和解析的,因此它们没有命名约定。 |
可选配置
中间件可以具有具有以下参数的可选配置:
参数 | 描述 | 类型 |
---|---|---|
config | 用于定义或覆盖中间件配置 | Object |
resolve | 中间件文件夹的路径(对外部中间件有用) | String |
内部中间件配置参考
Strapi 的核心包括以下内部中间件,主要用于性能、安全和错误处理:
Middleware | Added by Default | Required |
---|---|---|
body | Yes | Yes |
compression | No | No |
cors | Yes | Yes |
errors | Yes | Yes |
favicon | Yes | Yes |
ip | No | No |
logger | Yes | No |
poweredBy | Yes | No |
query | Yes | Yes |
response-time | No | No |
responses | Yes | Yes |
public | Yes | Yes |
security | Yes | Yes |
session | Yes | No |
body
body
中间件基于 koa-body。它接受以下选项:
选项 | 说明 | 类型 | 默认 |
---|---|---|---|
multipart | 解析多部分主体 | Boolean | true |
patchKoa | 将请求主体修补到 Koa 的 ctx.request | Boolean | true |
jsonLimit | JSON 主体的字节(如果是整数)限制 | String 或 Integer | 1mb |
formLimit | 表单主体的字节(如果是整数)限制 | String 或 Integer | 56kb |
textLimit | 文本主体的字节(如果是整数)限制 | String 或 Integer | 56kb |
encoding | 设置传入表单字段的编码 | String | utf-8 |
formidable | 传递给 formidable 多部分解析器的选项请参阅 node-formidable 文档。 | Object | undefined |
有关 koa-body
可用选项的完整列表,请查看 koa-body 文档。
示例:body 中间件的自定义配置
js
./config/middlewares.js
js
module.exports = [
// ...
{
name: 'strapi::body',
config: {
jsonLimit: '3mb',
formLimit: '10mb',
textLimit: '256kb',
encoding: 'gbk',
},
},
// ...
]
poweredBy
poweredBy
中间件向响应标头添加 X-Powered-By
参数。它接受以下选项:
选项 | 说明 | 类型 | 默认值 |
---|---|---|---|
poweredBy | X-Powered-By 标头的值 | String | 'Strapi <strapi.io>' |
详细信息示例:poweredBy 中间件的自定义配置
js
./config/middlewares.js
js
module.exports = [
// ...
{
name: 'strapi::poweredBy',
config: {
poweredBy: 'Some Awesome Company <example.com>'
},
},
// ...
]