You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Express.js中创建自定义参数装饰器获取请求中的User

实现NestJS自定义@GetUser参数装饰器获取用户信息

你之前写的基础装饰器仅能标记参数位置,无法直接获取request对象。NestJS提供了createParamDecorator工具函数,专门用来创建可获取请求上下文的参数装饰器,具体实现步骤如下:

1. 编写@GetUser装饰器代码

import { createParamDecorator, ExecutionContext } from '@nestjs/common';

export const GetUser = createParamDecorator(
  (data: string | undefined, ctx: ExecutionContext) => {
    // 从执行上下文获取Express环境的request对象
    const request = ctx.switchToHttp().getRequest();
    // 若传入字段名则返回user对应字段,否则返回完整user对象
    return data ? request.user?.[data] : request.user;
  },
);

2. 在接口中使用装饰器

直接在方法参数里使用@GetUser即可,还可指定要获取的user字段:

import { Put, Controller } from '@nestjs/common';
import { GetUser } from './your-decorator-path';

@Controller('users')
export class UsersController {
  @Put('/:_id')
  async update(
    @GetUser() user: any, // 获取完整user对象
    // 也可指定字段:@GetUser('id') userId: string
  ) {
    // 直接使用user对象
    console.log(user);
    // ...业务逻辑代码
  }
}

关键点说明

  • ExecutionContext是Nest的上下文对象,通过switchToHttp().getRequest()可拿到Express的request实例
  • 装饰器支持传入可选参数data,用于直接提取user的某个属性
  • 若你的user对象有明确类型,将any替换为对应类型定义即可,无需@ts-ignore

内容的提问来源于stack exchange,提问作者Ionut Enache

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 15:27:03