一、权限验证装饰器 - @Roles()
基于角色的访问控制(RBAC),限制接口访问权限
// src/decorators/roles.decorator.ts
import { SetMetadata } from'@nestjs/common';
// 堆代码 duidaima.com
// 定义角色枚举
exportenum UserRole {
ADMIN = 'admin',
EDITOR = 'editor',
USER = 'user'
}
/**
* 角色权限装饰器
* @param roles 允许访问的角色数组
* 使用示例:@Roles([UserRole.ADMIN])
*/
exportconst Roles = (...roles: UserRole[]) => SetMetadata('roles', roles);
// 在守卫中使用:
@Injectable()
exportclass RolesGuard implements CanActivate {
constructor(private reflector: Reflector) {}
canActivate(context: ExecutionContext): boolean {
const requiredRoles = this.reflector.get<UserRole[]>(
'roles',
context.getHandler()
);
// ...验证逻辑
}
}
二、请求日志装饰器 - @LogRequest()
自动记录完整的HTTP请求信息
// src/decorators/log-request.decorator.ts
import { createParamDecorator, ExecutionContext } from'@nestjs/common';
/**
* 记录请求完整信息
* 使用示例:@LogRequest()
*/
exportconst LogRequest = createParamDecorator(
(data: unknown, ctx: ExecutionContext) => {
const request = ctx.switchToHttp().getRequest();
return {
url: request.url,
method: request.method,
headers: request.headers,
body: request.body,
timestamp: newDate().toISOString()
};
}
);
// 在控制器中使用:
@Get()
async findOne(@LogRequest() logData: any) {
// logData会包含完整的请求信息
}
三、缓存装饰器 - @Cache()
声明式接口响应缓存,提升性能
// src/decorators/cache.decorator.ts
import { applyDecorators, UseInterceptors } from'@nestjs/common';
import { CacheInterceptor } from'@nestjs/cache-manager';
/**
* 自定义缓存装饰器
* @param ttl 缓存时间(秒)
* 使用示例:@Cache(60)
*/
exportfunction Cache(ttl: number) {
return applyDecorators(
UseInterceptors(CacheInterceptor),
SetMetadata('cacheTTL', ttl)
);
}
// 堆代码 duidaima.com
// 在服务层配置:
@Injectable()
exportclass CustomCacheInterceptor extends CacheInterceptor {
protected trackBy(context: ExecutionContext): string | undefined {
const ttl = this.reflector.get<number>('cacheTTL', context.getHandler());
// ...自定义缓存逻辑
}
}
四、事务管理装饰器 - @Transactional()
自动管理数据库事务,保证数据一致性
// src/decorators/transaction.decorator.ts
import { Transaction } from'typeorm-transactional';
/**
* 数据库事务装饰器
* 使用示例:@Transactional()
*/
exportconst Transactional = () => (
target: any,
propertyKey: string,
descriptor: PropertyDescriptor
) => {
const originalMethod = descriptor.value;
descriptor.value = asyncfunction (...args: any[]) {
return Transaction({ isolationLevel: 'READ COMMITTED' })(
originalMethod.bind(this)
.apply(this, args)
);
};
return descriptor;
};
五、参数验证装饰器 - @ValidateId()
参数格式预校验,防止非法输入
// src/decorators/validate-param.decorator.ts
import {
createParamDecorator,
BadRequestException
} from'@nestjs/common';
/**
* ID参数格式验证
* 使用示例:@ValidateId() id: string
*/
exportconst ValidateId = createParamDecorator(
(data: unknown, ctx: ExecutionContext) => {
const request = ctx.switchToHttp().getRequest();
const id = request.params.id;
if (!/^[a-f\d]{24}$/i.test(id)) {
thrownew BadRequestException('Invalid ID format');
}
return id;
}
);
六、响应格式装饰器 - @StandardResponse()
统一API响应格式规范
// src/decorators/response-format.decorator.ts
import {
applyDecorators,
Type,
HttpCode,
Header
} from'@nestjs/common';
import { ApiResponse } from'@nestjs/swagger';
/**
* 统一响应格式
* @param status HTTP状态码
* @param type 响应数据类型
* 使用示例:@StandardResponse(200, UserDto)
*/
exportfunction StandardResponse<T>(status: number, type?: Type<T>) {
return applyDecorators(
HttpCode(status),
Header('Content-Type', 'application/json'),
ApiResponse({
status,
type,
description: 'Standard API response'
})
);
}
七、性能监控装饰器 - @Benchmark()
方法执行耗时监控与日志记录
// src/decorators/benchmark.decorator.ts
import { Logger } from'@nestjs/common';
const logger = new Logger('Benchmark');
/**
* 方法执行时间监控
* 使用示例:@Benchmark()
*/
exportfunction Benchmark() {
returnfunction (
target: any,
propertyKey: string,
descriptor: PropertyDescriptor
) {
const originalMethod = descriptor.value;
descriptor.value = asyncfunction (...args: any[]) {
const start = Date.now();
try {
returnawait originalMethod.apply(this, args);
} finally {
const duration = Date.now() - start;
logger.log(`${propertyKey} executed in ${duration}ms`);
}
};
return descriptor;
};
}
八、多语言支持装饰器 - @Translate()
便捷获取国际化翻译内容
// src/decorators/i18n.decorator.ts
import { createParamDecorator } from'@nestjs/common';
import { I18nService } from'nestjs-i18n';
/**
* 获取当前语言文本
* 使用示例:@Translate() t: I18nService['translate']
*/
exportconst Translate = createParamDecorator(
(data: unknown, ctx: ExecutionContext) => {
const i18n = ctx.switchToHttp().getRequest().i18nService as I18nService;
return(key: string, options?: any) => i18n.translate(key, options);
}
);
九、版本控制装饰器 - @ApiVersion()
API多版本共存管理
// src/decorators/version.decorator.ts
import { Controller, SetMetadata, applyDecorators } from'@nestjs/common';
import { Version } from'@nestjs/common';
/**
* API版本控制装饰器
* @param versions 支持的版本数组
* 使用示例:@ApiVersion(['1', '2'])
*/
exportfunction ApiVersion(versions: string[]) {
return applyDecorators(
SetMetadata('apiVersions', versions),
Version(versions)
);
}
// 在控制器中使用:
@ApiVersion(['1', '2'])
@Controller('users')
exportclass UsersController {}