Skip to content

Commit

Permalink
feat: controller opt support sensitive opt
Browse files Browse the repository at this point in the history
  • Loading branch information
yviscool committed Jun 24, 2019
1 parent 9d835d0 commit 780f5d7
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 11 deletions.
11 changes: 9 additions & 2 deletions packages/midway-decorator/src/web/controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,17 @@ import { KoaMiddleware } from '../interface';

export interface ControllerOption {
prefix: string;
routerOptions: { middleware?: Array<string | KoaMiddleware> };
routerOptions: {
sensitive?: boolean;
middleware?: Array<string | KoaMiddleware>
};
}

export function controller(prefix: string, routerOptions: { middleware: Array<string | KoaMiddleware> } = {middleware: []}): ClassDecorator {
export function controller(prefix: string, routerOptions: {
sensitive?: boolean,
middleware?: Array<string | KoaMiddleware>
} = {middleware: [], sensitive: true}
): ClassDecorator {
return (target: any) => {
saveModule(CONTROLLER_KEY, target);
saveClassMetadata(CONTROLLER_KEY, {
Expand Down
26 changes: 17 additions & 9 deletions packages/midway-web/src/loader/webLoader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -187,14 +187,10 @@ export class MidwayWebLoader extends EggLoader {
}

protected async preRegisterRouter(target, controllerId) {
const app = this.app;
const controllerOption: ControllerOption = getClassMetadata(CONTROLLER_KEY, target);
let newRouter;
if (controllerOption.prefix) {
newRouter = new Router({
sensitive: true,
}, app);
newRouter.prefix(controllerOption.prefix);
const newRouter = this.createEggRouter(controllerOption);

if (newRouter) {
// implement middleware in controller
const middlewares = controllerOption.routerOptions.middleware;
await this.handlerWebMiddleware(middlewares, (middlewareImpl: KoaMiddleware) => {
Expand Down Expand Up @@ -224,16 +220,15 @@ export class MidwayWebLoader extends EggLoader {
newRouter[webRouter.requestMethod].apply(newRouter, routerArgs);
}
}
}

// sort for priority
if (newRouter) {
const priority = getClassMetadata(PRIORITY_KEY, target);
this.prioritySortRouters.push({
priority: priority || 0,
router: newRouter,
});
}

}

private async handlerWebMiddleware(middlewares, handlerCallback) {
Expand All @@ -252,6 +247,19 @@ export class MidwayWebLoader extends EggLoader {
}
}

/**
* @param controllerOption
*/
private createEggRouter(controllerOption: ControllerOption) {
const { prefix , routerOptions: { sensitive }} = controllerOption;
if (prefix) {
const router = new Router({ sensitive }, this.app);
router.prefix(prefix);
return router;
}
return null;
}

protected async refreshContext(): Promise<void> {
await this.containerLoader.refresh();
}
Expand Down

0 comments on commit 780f5d7

Please sign in to comment.