ctx.switchToHttp не является функцией - PullRequest
2 голосов
/ 26 марта 2020

Я использую гнездо js, и я пытался создать собственный декоратор:

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

Есть мысли?

Спасибо

1 Ответ

3 голосов
/ 01 апреля 2020

До версии 7.x пользовательские декораторы имели статус c и, следовательно, не передавали им ExecutionContext. В выпуске v7.x это было добавлено .

. Как уже упоминалось в комментариях к вопросу ОП, вам необходимо перейти на эту версию, чтобы получить пример в документации работает.

...