import { Configuration, App, Inject, MidwayDecoratorService, } from '@midwayjs/core'; import * as koa from '@midwayjs/koa'; import * as validate from '@midwayjs/validate'; import * as info from '@midwayjs/info'; import * as orm from '@midwayjs/typeorm'; import { join } from 'path'; // import { DefaultErrorFilter } from './filter/default.filter'; // import { NotFoundFilter } from './filter/notfound.filter'; import { ReportMiddleware } from './middleware/report.middleware'; import * as swagger from '@midwayjs/swagger'; import * as crossDomain from '@midwayjs/cross-domain'; import * as cron from '@midwayjs/cron'; import * as jwt from '@midwayjs/jwt'; import { USER_KEY } from './decorator/user.decorator'; import { AuthMiddleware } from './middleware/auth.middleware'; @Configuration({ imports: [ koa, validate, { component: info, enabledEnvironment: ['local', 'prod'], }, orm, swagger, crossDomain, cron, jwt, ], importConfigs: [join(__dirname, './config')], }) export class MainConfiguration { @App('koa') app: koa.Application; @Inject() decoratorService: MidwayDecoratorService; @Inject() jwtService: jwt.JwtService; // 注入 JwtService 实例 async onReady() { // add middleware this.app.useMiddleware([ReportMiddleware, AuthMiddleware]); // add filter // this.app.useFilter([NotFoundFilter, DefaultErrorFilter]); this.decoratorService.registerParameterHandler( USER_KEY, async ( options ): Promise<{ id: number; userName: string; }> => { const ctx = options.originArgs[0]; const token = ctx.headers['authorization']?.split(' ')[1]; const config = ctx.app.getConfig('jwt'); // 动态获取配置项 if (!token) { ctx.throw(401, 'Token not found'); } try { const decoded: any = this.jwtService.verify(token, config.secret); // 替换为你的密钥 return decoded; } catch (error) { ctx.throw(401, 'Invalid token'); } } ); } }