为了账号安全,请及时绑定邮箱和手机立即绑定

NestJS createParamDecorator 返回未定义

NestJS createParamDecorator 返回未定义

暮色呼如 2023-09-07 16:34:54
我使用的是 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;  }}
查看完整描述

3 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

您可以首先从 ExecutionContext 获取信息:


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


export const User = createParamDecorator(

  (data: unknown, ctx: ExecutionContext) => {

    const request = ctx.switchToHttp().getRequest();

    return request.user;

  },

);

查看完整回答
反对 回复 2023-09-07
?
繁星coding

TA贡献1797条经验 获得超4个赞

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



查看完整回答
反对 回复 2023-09-07
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

请注意,对于那些面临类似问题的人,我错过了第一个数据参数,它引发了我的错误。

createParamDecorator((ctx: ExecutionContext)会导致未定义的上下文,而createParamDecorator((data: unknown, ctx: ExecutionContext)有效。


查看完整回答
反对 回复 2023-09-07
  • 3 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信