forked from yoone/API
1
0
Fork 0
API/src/configuration.ts

79 lines
2.1 KiB
TypeScript

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');
}
}
);
}
}