Nestjs ctx.switchToHttp不是一个函数

Nestjs ctx.switchToHttp不是一个函数,nestjs,Nestjs,我正在使用nestjs,并尝试创建一个自定义装饰器: import { createParamDecorator, ExecutionContext } from '@nestjs/common'; import { User } from './user.entity'; export const GetUser = createParamDecorator( (data, ctx: ExecutionContext): User => { const req = ctx.

我正在使用nestjs,并尝试创建一个自定义装饰器:

import { createParamDecorator, ExecutionContext } from '@nestjs/common';
import { User } from './user.entity';

export const GetUser = createParamDecorator(
  (data, ctx: ExecutionContext): User => {
    const req = ctx.switchToHttp().getRequest();
    return req.user;
  },
);
这里使用的装饰器是:

  @Post('/test')
  @UseGuards(AuthGuard())
  test(@GetUser() user: User) {
    console.log(user);
  }
但我得到了以下错误:

[Nest] 15053   - 26/03/2020, 13:28:19   [ExceptionsHandler] ctx.switchToHttp is not a function +61625ms
TypeError: ctx.switchToHttp is not a function
    at /Users/nelson.larios/Documents/nestjs/nestjs-task-management/dist/auth/get-user.decorator.js:5:21
    at /Users/nelson.larios/Documents/nestjs/nestjs-task-management/node_modules/@nestjs/core/router/router-execution-context.js:115:35
    at resolveParamValue (/Users/nelson.larios/Documents/nestjs/nestjs-task-management/node_modules/@nestjs/core/router/router-execution-context.js:143:31)
    at Array.map (<anonymous>)
    at pipesFn (/Users/nelson.larios/Documents/nestjs/nestjs-task-management/node_modules/@nestjs/core/router/router-execution-context.js:148:45)
    at /Users/nelson.larios/Documents/nestjs/nestjs-task-management/node_modules/@nestjs/core/router/router-execution-context.js:36:36
    at InterceptorsConsumer.intercept (/Users/nelson.larios/Documents/nestjs/nestjs-task-management/node_modules/@nestjs/core/interceptors/interceptors-consumer.js:10:20)
    at /Users/nelson.larios/Documents/nestjs/nestjs-task-management/node_modules/@nestjs/core/router/router-execution-context.js:45:60
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
    at async /Users/nelson.larios/Documents/nestjs/nestjs-task-management/node_modules/@nestjs/core/router/router-proxy.js:8:17
[Nest]15053-26/03/2020,13:28:19[ExceptionHandler]ctx.switchToHttp不是一个+61625ms的函数
TypeError:ctx.switchToHttp不是函数
at/Users/nelson.larios/Documents/nestjs/nestjs任务管理/dist/auth/get user.decorator.js:5:21
at/Users/nelson.larios/Documents/nestjs/nestjs任务管理/node_modules/@nestjs/core/router/router执行上下文。js:115:35
在resolveParamValue(/Users/nelson.larios/Documents/nestjs/nestjs任务管理/node_modules/@nestjs/core/router/router execution context.js:143:31)
在Array.map()处
在pipesFn(/Users/nelson.larios/Documents/nestjs/nestjs task management/node_modules/@nestjs/core/router/router execution context.js:148:45)
at/Users/nelson.larios/Documents/nestjs/nestjs任务管理/node_modules/@nestjs/core/router/router执行上下文。js:36:36
在interceptorsumer.intercept(/Users/nelson.larios/Documents/nestjs/nestjs任务管理/node_modules/@nestjs/core/interceptors/interceptors consumer.js:10:20)
at/Users/nelson.larios/Documents/nestjs/nestjs任务管理/node_modules/@nestjs/core/router/router执行上下文。js:45:60
在处理和拒绝时(内部/process/task_queues.js:97:5)
在async/Users/nelson.larios/Documents/nestjs/nestjs task management/node_modules/@nestjs/core/router/router proxy.js:8:17
有什么想法吗


感谢在7.x版本之前,自定义装饰器是静态的,因此没有将
ExecutionContext
传递给它们。在


正如OP问题评论中提到的,您需要升级到此版本才能正常工作。

您使用的是哪一版本的Nest?嗨,Jay。版本7.0.2
nest info
打印出7.0.2?我唯一一次看到这个错误的时候,仍然有来自NestV6的一些代码。你有复制它的存储库吗?好的,杰。就是这样。出于某种原因,我的nest版本7.0.2创建了版本6的package.json。奇怪吧?谢谢你,伙计。如果你没有提到我就不会查了。注意安全!问题是,这是怎么发生的?我以前创建过另一个应用程序,但这并没有发生。