@@ -3,7 +3,7 @@ id: middleware
3
3
title : 中间件
4
4
---
5
5
6
- Salak是基于Koa 2.0开发,所以Salak的中间件形式与Koa中间件一致 。
6
+ Salak 是基于 Koa 2.0 开发,所以 Salak 的中间件形式与 Koa 中间件一致 。
7
7
8
8
## 编写中间件
9
9
@@ -26,9 +26,9 @@ module.export = async (ctx, next) => {
26
26
}
27
27
```
28
28
29
- 如果返回 async function,会加入到中间件执行队列中,否则会先执行mw (options, app),然后将返回结果加入到中间件执行队列。
29
+ 如果返回 async function,会加入到中间件执行队列中,否则会先执行 mw (options, app),然后将返回结果加入到中间件执行队列。
30
30
31
- 接下来,我们以写简单的error中间件为例 :
31
+ 接下来,我们以写简单的 error 中间件为例 :
32
32
33
33
``` javascript
34
34
module .exports = ({ status = 500 } = {}, app ) => {
@@ -51,26 +51,26 @@ module.exports = ({ status = 500 } = {}, app) => {
51
51
52
52
#### 模块配置中使用
53
53
54
- 通过配置middleware字段,中间件配置通过配置对应的key即可
54
+ 通过配置 middleware 字段,中间件配置通过配置对应的 key 即可
55
55
56
- middleware配置有两种写法 :
56
+ middleware 配置有两种写法 :
57
57
58
- - 直接写中间件对应文件的名字,如error .js:
58
+ - 直接写中间件对应文件的名字,如 error .js:
59
59
60
60
``` javascript
61
+ // common/config/default.js:
61
62
module .exports = {
62
- middleware: [
63
- ' error'
64
- ],
63
+ middleware: [' error' ],
65
64
error: {
66
65
status: 500
67
66
}
68
67
}
69
68
```
70
69
71
- - 写中间件名字,以及中间对应的位置,如果中间件通过npm安装 ,只需指定包名即可,如:
70
+ - 写中间件名字,以及中间对应的位置,如果中间件通过 npm 安装 ,只需指定包名即可,如:
72
71
73
72
``` javascript
73
+ // common/config/default.js:
74
74
module .exports = {
75
75
middleware: [
76
76
{
@@ -88,17 +88,24 @@ module.exports = {
88
88
#### 控制器构造函数中使用
89
89
90
90
``` javascript
91
- this .middleware (' error' , this .module , {
92
- status: 503
93
- })
91
+ // src/${module}/controller/${name}.js:
92
+ constructor () {
93
+ this .middleware (' error' , this .module , {
94
+ status: 503
95
+ })
96
+ }
97
+
94
98
```
95
99
96
100
控制器构造函数还支持控制器内自定义中间件,如
97
101
98
102
``` javascript
99
- this .middleware (async (ctx , next ) => {
100
- await next ()
101
- })
103
+ // src/${module}/controller/${name}.js:
104
+ constructor () {
105
+ this .middleware (async (ctx , next ) => {
106
+ await next ()
107
+ })
108
+ }
102
109
```
103
110
104
111
### 中间件查询原则
@@ -107,7 +114,7 @@ this.middleware(async (ctx, next) => {
107
114
108
115
在控制器中,指定模块中间件,查询不到,会查询框架内建中间件
109
116
110
- ### 使用Koa中间件
117
+ ### 使用 Koa 中间件
111
118
112
119
以[ koa-etag] ( https://github.com/koajs/etag ) 为例,在框架运行中加载这个中间件,只需要在配置文件中添加如下代码:
113
120
@@ -131,13 +138,13 @@ module.exports = {
131
138
132
139
框架自带的中间件或应用层中间件,都支持如下配置:
133
140
134
- - ` enable ` : Boolean,控制中间件是否开启,默认为true
141
+ - ` enable ` : Boolean,控制中间件是否开启,默认为 true
135
142
- ` match ` : Regex|string|Array|Function,设置只有符合条件的请求才经过该中间件
136
143
- ` ignore ` : Regex|string|Array|Function,设置符合某些规则的请求不经过该中间件
137
144
138
145
### enable
139
146
140
- 如果我们需要禁用某个中间件,只需要将其设置为false即可 。
147
+ 如果我们需要禁用某个中间件,只需要将其设置为 false 即可 。
141
148
142
149
``` javascript
143
150
module .exports = {
@@ -149,9 +156,9 @@ module.exports = {
149
156
150
157
### match/ignore
151
158
152
- match和ignore参数一致 ,但作用相反,不允许同时配置。
159
+ match 和 ignore 参数一致 ,但作用相反,不允许同时配置。
153
160
154
- 如想让仅以/meta开头的请求使用meta中间件 ,配置如下:
161
+ 如想让仅以/meta 开头的请求使用 meta 中间件 ,配置如下:
155
162
156
163
``` javascript
157
164
module .exports = {
@@ -161,16 +168,16 @@ module.exports = {
161
168
}
162
169
```
163
170
164
- match和ignore支持的参数如下 :
171
+ match 和 ignore 支持的参数如下 :
165
172
166
- - ` string ` : 当参数为字符串时,配置的是URL前缀 ,也能配置成字符串数组;
173
+ - ` string ` : 当参数为字符串时,配置的是 URL 前缀 ,也能配置成字符串数组;
167
174
- ` Regex ` : 正则表达式,直接匹配路径是否符合条件;
168
- - ` Function ` : 允许传入函数,由用户控制具体的规则,参数为ctx ,通过返回 true/false 来判断是否满足条件。
175
+ - ` Function ` : 允许传入函数,由用户控制具体的规则,参数为 ctx ,通过返回 true/false 来判断是否满足条件。
169
176
170
177
``` javascript
171
178
module .exports = {
172
179
meta: {
173
- match (ctx ) {
180
+ match (ctx ) {
174
181
if (ctx .path .indexOf (' meta' ) !== 0 ) {
175
182
return true
176
183
}
@@ -193,7 +200,7 @@ module.exports = {
193
200
194
201
### 禁用默认中间件
195
202
196
- 在根模块配置中,将内置中间件enable设置为false即可 。
203
+ 在根模块配置中,将内置中间件 enable 设置为 false 即可 。
197
204
198
205
如:
199
206
@@ -207,43 +214,43 @@ module.exports = {
207
214
208
215
### static
209
216
210
- 静态资源渲染,采用koa -static
217
+ 静态资源渲染,采用 koa -static
211
218
212
219
配置:
213
220
214
- - ` root ` : 默认为应用public
221
+ - ` root ` : 默认为应用 public
215
222
- ` opts ` : 同[ koa-static opts] ( https://github.com/koajs/static#options )
216
223
217
224
### bodyParser
218
225
219
- 采用了koa -bodyparser,默认支持json、form解析
226
+ 采用了 koa -bodyparser,默认支持 json、form 解析
220
227
221
228
配置可参考[ koa-bodyparser] ( https://github.com/koajs/bodyparser#options )
222
229
223
- ** 注:koa-bodyparser已经不包含multipart /form-data解析 **
230
+ ** 注:koa-bodyparser 已经不包含 multipart /form-data 解析 **
224
231
225
232
### error
226
233
227
- error中间件 ,处理应用请求过程中报错
234
+ error 中间件 ,处理应用请求过程中报错
228
235
229
236
配置:
230
237
231
- - ` status ` : 状态码设置,默认为'auto',表示根据出错状态来自动设置http响应状态码;否则为200状态码
232
- - ` type ` : 错误输出类型,可以为json或者html ,无配置情况下,框架根据accept-type自动选择
238
+ - ` status ` : 状态码设置,默认为'auto',表示根据出错状态来自动设置 http 响应状态码;否则为 200 状态码
239
+ - ` type ` : 错误输出类型,可以为 json 或者 html ,无配置情况下,框架根据 accept-type 自动选择
233
240
234
241
### notFound
235
242
236
- notFound中间件,处理应用请求404错误
243
+ notFound 中间件,处理应用请求 404 错误
237
244
238
245
配置:
239
246
240
- - ` type ` : 输出类型,可以为json或html ,无配置情况下,框架根据accept-type自动选择
241
- - ` pageUrl ` : 如设置,出现404时,则跳转至相应URL
247
+ - ` type ` : 输出类型,可以为 json 或 html ,无配置情况下,框架根据 accept-type 自动选择
248
+ - ` pageUrl ` : 如设置,出现 404 时,则跳转至相应 URL
242
249
- ` notFoundHtml ` : 定制错误页面
243
250
244
251
### siteFile
245
252
246
- siteFile中间件 ,用于配置网站文件
253
+ siteFile 中间件 ,用于配置网站文件
247
254
248
255
如:
249
256
0 commit comments