Метод API: @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 ? 'Сервер дал ответ' : 'Сервер не дал ответ' } 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, хотя в декораторе я задал его 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) ); } 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) ); } Я новичок, заранее извиняюсь за говно код)
Смог решить проблему, но я хз, правильно это или нет @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 ? 'Сервер дал ответ' : 'Сервер не дал ответ' }); } 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 ? 'Сервер дал ответ' : 'Сервер не дал ответ' }); }