1
1
import * as Koa from 'koa'
2
2
import * as Router from 'koa-router'
3
- import { installMiddleware } from './middleware'
3
+ import { installMiddleware , middlePoll } from './middleware/index '
4
4
import parseParamsDecorator from './params'
5
5
import { RuntimeOptions , RouteMetaInterface } from '../../types'
6
6
import { META_ROUTER } from '../../constants'
7
7
import { resolvePath } from '../../utils'
8
-
8
+ const Logger = console
9
9
/**
10
10
* @description 注册中间件调用koa启动服务
11
11
* @param controllers
@@ -14,9 +14,8 @@ import { resolvePath } from '../../utils'
14
14
function KoaRuntime ( controllers : Set < any > , options : RuntimeOptions ) {
15
15
const app : Koa = new Koa ( )
16
16
const router : Router = new Router ( )
17
- const plugins : Array < Koa . Middleware > = options . plugins || [ ]
18
- // 注册中间件
19
- installMiddleware ( app , plugins )
17
+ // 注册全局中间件
18
+ installMiddleware ( app , middlePoll . golbalMiddle )
20
19
for ( let controllerMeta of controllers ) {
21
20
const { path : rootPath , controller } = controllerMeta
22
21
if ( ! rootPath ) {
@@ -30,12 +29,31 @@ function KoaRuntime(controllers: Set<any>, options: RuntimeOptions) {
30
29
controller [ name ]
31
30
)
32
31
if ( metaRoute ) {
33
- const { methods, path, beforePlugins, afterPlugins } = metaRoute
32
+ const {
33
+ methods,
34
+ path,
35
+ beforeMiddlesType,
36
+ afterMiddlesType
37
+ } = metaRoute
38
+ const beforeMiddles = beforeMiddlesType . map ( middleType => {
39
+ if ( middlePoll . routeMiddle . has ( middleType ) ) {
40
+ return middlePoll . routeMiddle . get ( middleType )
41
+ } else {
42
+ Logger . error ( `[kever|err]: ${ String ( middleType ) } unregistered!` )
43
+ }
44
+ } )
45
+ const afterMiddles = afterMiddlesType . map ( middleType => {
46
+ if ( middlePoll . routeMiddle . has ( middleType ) ) {
47
+ return middlePoll . routeMiddle . get ( middleType )
48
+ } else {
49
+ Logger . error ( `[kever|err]: ${ String ( middleType ) } unregistered!` )
50
+ }
51
+ } )
34
52
const routePath : string = resolvePath ( rootPath , path )
35
53
for ( let method of methods ) {
36
54
router [ method ] (
37
55
routePath ,
38
- ...beforePlugins ,
56
+ ...beforeMiddles ,
39
57
async ( ctx : Koa . Context , next : Koa . Next ) => {
40
58
// 将ctx和next绑定到controller实例上
41
59
controller [ 'ctx' ] = ctx
@@ -44,7 +62,7 @@ function KoaRuntime(controllers: Set<any>, options: RuntimeOptions) {
44
62
const routeParams = parseParamsDecorator ( controller [ name ] , ctx )
45
63
await controller [ name ] ( ...routeParams )
46
64
} ,
47
- ...afterPlugins
65
+ ...afterMiddles
48
66
)
49
67
}
50
68
}
0 commit comments