@zenweb/controller
Advanced tools
+1
-3
@@ -22,6 +22,4 @@ import { ControllerRegister } from './register.js'; | ||
| } | ||
| setup.after(() => { | ||
| controllerRegister.addToRouter(setup.core.router); | ||
| }); | ||
| controllerRegister.addToRouter(setup.core.router); | ||
| }; | ||
| } |
| import { Router } from '@zenweb/router'; | ||
| import { ControllerClass, ControllerItem } from './types.js'; | ||
| /** | ||
| * 取得控制器路由对象 | ||
| * 注册控制器路由 | ||
| */ | ||
| export declare function getControllerRouter({ option, mappingList, target }: ControllerItem): Router; | ||
| export declare function registerControllerRouter(router: Router, { option, mappingList, target }: ControllerItem): Router; | ||
| /** | ||
@@ -8,0 +8,0 @@ * 控制器注册器 |
+26
-35
@@ -7,45 +7,36 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { | ||
| }; | ||
| /// <reference types="@zenweb/result" /> | ||
| import { component } from '@zenweb/inject'; | ||
| import { Router } from '@zenweb/router'; | ||
| import { controllerDecorator, mappingDecorator } from './controller.js'; | ||
| import { debug } from './utils.js'; | ||
| /** | ||
| * 取得控制器路由对象 | ||
| * 注册控制器路由 | ||
| */ | ||
| export function getControllerRouter({ option, mappingList, target }) { | ||
| export function registerControllerRouter(router, { option, mappingList, target }) { | ||
| debug('@controller(%o) %o', option, target); | ||
| const router = new Router(option); | ||
| if (option.middleware) { | ||
| if (Array.isArray(option.middleware)) { | ||
| if (option.middleware.length) { | ||
| router.use(...option.middleware); | ||
| } | ||
| } | ||
| else { | ||
| router.use(option.middleware); | ||
| } | ||
| } | ||
| const controllerMiddlewares = option.middleware ? (Array.isArray(option.middleware) ? option.middleware : [option.middleware]) : []; | ||
| for (const item of mappingList) { | ||
| debug('@mapping(%o)', item); | ||
| const mappingMiddlewares = [ | ||
| ...item.middleware, | ||
| async (ctx) => { | ||
| const controller = await ctx.injector.getInstance(target); | ||
| const data = await ctx.injector.apply(controller, item); | ||
| if (typeof data !== 'undefined') { | ||
| if (ctx.success) { | ||
| await ctx.success(data); | ||
| router.register({ | ||
| prefix: option.prefix, | ||
| path: item.path, | ||
| method: item.methods, | ||
| middleware: [ | ||
| ...controllerMiddlewares, | ||
| ...item.middleware, | ||
| async (ctx, next) => { | ||
| const controller = await ctx.injector.getInstance(target); | ||
| const data = await ctx.injector.apply(controller, item); | ||
| if (typeof data !== 'undefined') { | ||
| if (ctx.success) { | ||
| await ctx.success(data); | ||
| } | ||
| else { | ||
| ctx.body = data; | ||
| } | ||
| } | ||
| else { | ||
| ctx.body = data; | ||
| } | ||
| } | ||
| }, | ||
| ]; | ||
| if (item.methods.includes('ALL')) { | ||
| router.all(item.path, ...mappingMiddlewares); | ||
| } | ||
| else { | ||
| router.register(item.path, item.methods, ...mappingMiddlewares); | ||
| } | ||
| return next(); | ||
| }, | ||
| ], | ||
| }); | ||
| } | ||
@@ -114,3 +105,3 @@ return router; | ||
| for (const item of this.controllers) { | ||
| router.add(getControllerRouter(item)); | ||
| registerControllerRouter(router, item); | ||
| } | ||
@@ -117,0 +108,0 @@ } |
+8
-2
@@ -1,2 +0,1 @@ | ||
| import { RouterOptions } from '@zenweb/router'; | ||
| import { Middleware } from '@zenweb/core'; | ||
@@ -22,3 +21,10 @@ import { RouterMethod, RouterPath } from '@zenweb/router'; | ||
| */ | ||
| export interface ControllerOption extends RouterOptions { | ||
| export interface ControllerOption { | ||
| /** | ||
| * 在控制器中的每个 \@mapping path 上添加前缀 | ||
| */ | ||
| prefix?: string; | ||
| /** | ||
| * 在控制器中的每个 \@mapping 上添加前置中间件 | ||
| */ | ||
| middleware?: Middleware | Middleware[]; | ||
@@ -25,0 +31,0 @@ } |
+2
-2
| { | ||
| "name": "@zenweb/controller", | ||
| "type": "module", | ||
| "version": "6.0.0", | ||
| "version": "6.1.0", | ||
| "description": "Zenweb Controller module", | ||
@@ -43,3 +43,3 @@ "exports": "./dist/index.js", | ||
| "@zenweb/result": "^5.0.0", | ||
| "@zenweb/router": "^6.0.3", | ||
| "@zenweb/router": "^6.3.0", | ||
| "decorator-make": "^1.5.0", | ||
@@ -46,0 +46,0 @@ "globby": "11.0.4" |
18611
-0.16%411
-1.2%Updated