Quiero acceder al objeto res
para enviar cookies httpOnly
y necesito validar el cuerpo con DTO. pero cada vez que trato de hacerlo, algo sale mal, ¿cuál es el orden correcto para estos parámetros?
No hay un orden estricto que deba seguirse. Cada método de controlador puede usar decoradores para recuperar cosas diferentes (consulte los documentos del controlador: https://docs.nestjs.com/controllers )
Imaginemos que está creando un punto final para manejar algún tipo de búsqueda mediante una solicitud POST y una carga útil. Nest devuelve algunos resultados y establece cookies con la marca de tiempo de la última búsqueda realizada.
Eso suena como sus requisitos, ¿verdad?
Asegúrese de seguir la documentación de cookies e instalar todas las dependencias juntas y configurar el middleware del analizador de cookies: https://docs.nestjs.com/techniques/cookies
import { IsInt, IsNotEmpty } from 'class-validator'; export class SearchBodyDto { @IsNotEmpty() searchPhrase: string; @IsInt() page = 1; }
import { Request, Response } from 'express'; import { Body, Controller, Post, Req, Res } from '@nestjs/common'; @Controller() export class AppController { @Post('/search') async search( @Body() body: SearchBodyDto, @Req() req: Request, // passthrough:true here leaves response handling to framework. // Otherwise you would need to send response manually, like: `res.json({data})` @Res({ passthrough: true }) res: Response, ) { const currentTimestamp = new Date().toISOString(); // Save to cookies current timestamp of search. res.cookie('lastSearch', currentTimestamp, { httpOnly: true }); return { // Return last search timestamp and fallback to current timestamp. lastSearch: req.cookies.lastSearch ?? currentTimestamp, // Validated search phrase from DTO. searchPhrase: body.searchPhrase, // Page by default 1. page: body.page, // Some example search results. searchResults: ['water', 'wind', 'earth'], }; } }
Ahora, cuando realice una solicitud al punto final, verá el último tiempo de búsqueda en una respuesta: ejemplo de cartero , y también ese valor se establecerá en la cookie 'lastSearch'.
La carga útil aún se validará mediante decoradores en DTO.
No hay orden.
Además, son fábricas de decoradores de parámetros , no parámetros.