NestJS createParamDecorator 返回未定义

我使用的是 Nest 版本 ^6.7.2


我正在尝试创建一个 createParamDecorator 从请求中获取 req.user 值。


在 createParamDecorator 内部, req.user 有一个值,但是当我尝试使用装饰器获取控制器中的值时,该值是未定义的。


const AuthSession = createParamDecorator((data, req) => {

  console.log(req.user); // session data

  return req.user;

});

Controller()

export default class AuthController {

  @Get("/token/ping")

  @UseGuards(AuthGuard("jwt"))

  tokenPing(@AuthSession() session: Session) {

    console.log(session); // undefined

    return session;

  }

}

编辑:我刚刚尝试更新到 Nestjs v7,但遇到了同样的问题


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


const AuthSession = createParamDecorator((data: any, ctx: ExecutionContext) => {

  return { message: "asdf" };

});


export default AuthSession;

@Controller()

export default class AuthController {

  @Get("/token/ping")

  @UseGuards(AuthGuard("jwt"))

  tokenPing(@AuthSession() session: Session) {

    console.log(session); // undefined

    return session;

  }

}


暮色呼如
浏览 122回答 3
3回答

牛魔王的故事

您可以首先从 ExecutionContext 获取信息:    import { createParamDecorator, ExecutionContext } from '@nestjs/common';export const User = createParamDecorator(  (data: unknown, ctx: ExecutionContext) => {    const request = ctx.switchToHttp().getRequest();    return request.user;  },);

繁星coding

我明白问题出在哪里了。我有一个自定义验证 PipeTransform,如果 ArgumentMetadata.type 既不是“body”也不是“param”,则返回未定义。所以现在,如果 ArgumentMetadata.type 既不是“body”也不是“param”,我只返回验证器转换方法的第一个参数(输入),这解决了问题。

慕虎7371278

请注意,对于那些面临类似问题的人,我错过了第一个数据参数,它引发了我的错误。createParamDecorator((ctx: ExecutionContext)会导致未定义的上下文,而createParamDecorator((data: unknown, ctx: ExecutionContext)有效。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript