一些 Nestjs 的自定义装饰器

Auth Decorator

在使用了 @nestjs/passport 进行用户登录验证后,我们时长需要一个装饰器来限制用户需要登录。

auth.decorator.tsts
import { applyDecorators, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';

export function Auth() {
    return applyDecorators(UseGuards(AuthGuard('jwt')));
}

当前登录用户

在登录后,我们时常需要获取当前登录用户的信息。这时候就可以配合之前的 AuthDecorator 来创建一个参数装饰器获取当前用户了

current-user.decorator.tsts
import { createParamDecorator } from '@nestjs/common';
import { ExecutionContextHost } from '@nestjs/core/helpers/execution-context-host';

export const CurrentUser = createParamDecorator((data: unknown, ctx: ExecutionContextHost) => {
    const request = ctx.switchToHttp().getRequest();
    // eslint-disable-next-line @typescript-eslint/no-unsafe-return
    return request.user;
});

合并路由参数

我们可能需要将 ID 等参数信息合并到 Body 中,并且自动转换为 number 类型

2025年终总结
Nestjs + Drizzle 项目中一些常用的自定义校验