Загрузка...

Как вытащить данные из декоратора? NestJS + TS

Тема в разделе Node.js создана пользователем IFearNobody 18 июн 2025. 121 просмотр

  1. IFearNobody
    IFearNobody Автор темы 18 июн 2025 179 14 дек 2022
    Метод API:
    JS
    @ApiOperation({ summary: 'Пингануть сервер' })
    @ApiOkResponse({ description: 'Сервер дал ответ' })
    @ApiNotFoundResponse({ description: 'Сервер не найден'})
    @Post('/:id/ping')
    @CheckServer()
    async pingServer(@Param('id') id: number, @Req() req: Request, @Res() res: Response) {
    const serverData = req.server;

    const pingServer = await this.serverService.pingServer(serverData.xui.url);

    res.status(HttpStatus.OK).json({
    result: pingServer,
    message: pingServer ? 'Сервер дал ответ' : 'Сервер не дал ответ'
    }
    Я хочу из CheckServer вытащить данные сервера, но, происходит ошибка в req.server, server нет в обьекте req, хотя в декораторе я задал его

    JS
    import { Injectable, CanActivate, ExecutionContext, HttpStatus, applyDecorators, UseGuards } from '@nestjs/common';
    import { Response } from 'express';
    import { ServerService } from './server.service';

    @Injectable()
    export class ServerCheckGuard implements CanActivate {
    constructor(private readonly serverService: ServerService) {}

    async canActivate(context: ExecutionContext): Promise<boolean> {
    const ctx = context.switchToHttp();
    const response = ctx.getResponse<Response>();
    const request = ctx.getRequest();
    const serverId = +request.params.id;

    if (!serverId || serverId <= 0) {
    response.status(HttpStatus.BAD_REQUEST).json({
    result: false,
    message: 'Некорректный ID сервера',
    data: null
    });
    return false;
    }

    const server = await this.serverService.getServerById(serverId);
    if (!server) {
    response.status(HttpStatus.NOT_FOUND).json({
    result: true,
    message: 'Сервер не найден'
    });

    return false;
    }

    request.server = server;
    return true;
    }
    }

    export function CheckServer() {
    return applyDecorators(
    UseGuards(ServerCheckGuard)
    );
    }
    Я новичок, заранее извиняюсь за говно код)
     
  2. IFearNobody
    IFearNobody Автор темы 18 июн 2025 179 14 дек 2022
    Смог решить проблему, но я хз, правильно это или нет


    JS
      @ApiOperation({ summary: 'Пингануть сервер' })
    @ApiOkResponse({ description: 'Сервер дал ответ' })
    @ApiNotFoundResponse({ description: 'Сервер не найден'})
    @Post('/:id/ping')
    @CheckServer()
    async pingServer(@Param('id') id: number, @Req() req: { server: ServerEntity }, @Res() res: Response) {
    const pingServer = await this.serverService.pingServer(req.server.xui.url);

    res.status(HttpStatus.OK).json({
    result: pingServer,
    message: pingServer ? 'Сервер дал ответ' : 'Сервер не дал ответ'
    });
    }
     
    18 июн 2025 Изменено
Загрузка...
Top