Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

749
Views
Cómo obtener una consulta de URL anidada en Nest.js

Tengo la aplicación NestJS. Tengo que obtener la consulta de la URL. El problema es que mi fecha de creación es un objeto y no puedo obtenerlo como objeto anidado a través de @Query.

Aquí hay un ejemplo de la ruta:

 xxx/yyy/orders?key1=value&key2=value&key3=value&createdAt[lte]=2021-07-01&createdAt[gte]=2011-03-30&orderBy=desc&limit=500

Estoy tratando de obtener createdAt[lte] y createdAt[gte] como el objeto anidado

 export interface QueryI { key1: string; key2: string; key3: string; key4: string; createdAt: { lte: string, gte: string, } orderBy: 'desc' | 'asc'; limit: number; }

Aquí está mi controlador:

 @Get('route') getAll( @Query() query: QueryI): Promise<void> { return this.myService.findAll(query); }

pero esto me da el siguiente resultado

 { key1: 'value', key2: 'value', key3: 'value', key4: 'value', 'createdAt[lte]': 'some date', 'createdAt[gte]': 'some date', orderBy: 'desc', limit: '500' }

Probé JSON.stringify y consulté preguntas similares en SOW pero no tuve suerte.

Gracias

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Cambie QueryI de una interfaz a una clase.

Trabajando en NestJS 7.

URL utilizada para la prueba

http://localhost:3000/api/v1/store/search?nestedObj[key1]=yolo&nestedObj[key2]=sup%20bruh&el=test

DTO usado

 export class TestDto { el: string; nestedObj: { key1: string; key2: string; }; }

Controlador

 @Controller('v1/store') @UsePipes(new ValidationPipe({ exceptionFactory: getFormattedErrors })) @UseFilters(DomainExceptionFilter) export class TestController{ @Get('search') public async searchStore(@Query() testDto: TestDto) { console.log(testDto); return 1; } } // Console log - { nestedObj: { key1: 'yolo', key2: 'sup bruh' }, el: 'test' }
over 4 years ago · Santiago Trujillo Report

0

EDITAR

Al final, implementé diferentes clases y usé @Pipe para validar mi consulta: Aquí está el código:

pipa.ts

 @Injectable() export class ValidateQueryPipe implements PipeTransform { transform(value: any, metadata: ArgumentMetadata) { let incomingQuery = value as IncomingQuery; let mappedQuery = new QueryParameters() mappedQuery.key1 = incomingQuery.key1 mappedQuery.key2= incomingQuery.key2 // other mapped valus mappedQuery.createdAt = new CreatedAt(incomingQuery['createdAt[lte]'], incomingQuery['createdAt[gte]']) return mappedQuery; }

controlador.ts

 @Get(':someurl/someurl') getAllOrders( @Query(ValidateQueryPipe) query: QueryParameters): Promise<Observable<any>> { return this.service.findAll(erpCode, query); }

consulta-parámetros.ts

 import { CreatedAt } from "./created-at"; export class QueryParameters { key1: string; key2: string; createdAt: CreatedAt; }

creado-en.ts

 export class CreatedAt { lte: string; gte: string; constructor(lte: string, gte: string){ this.lte = lte; this.gte = gte; }; }

Bueno, he encontrado una solución parcial y la publicaré aquí hasta que aparezca una mejor respuesta: estoy extrayendo las propiedades anidadas en consultas separadas y creando mi modelo. No es perfecto, pero está haciendo el trabajo por ahora...

controlador.ts

 getAllOrders( @Query() query, @Query('createdAt[lte]') lte: string, @Query('createdAt[gte]') gte: string): Promise<void> { const mappedObject = new QueryParameters(query, lte, gte) return this.orderService.findAll(erpCode, mappedObject); }

creadoEnModelo.ts

 export class CreatedAt { lte: string; gte: string; constructor(lte: string, gte: string){ this.lte = lte; this.gte = gte; }; }

mi-modelo.ts

 import { CreatedAt } from "./created-at"; export class QueryParameters { //other keys createdAt: CreatedAt; constructor(query, lte, gte){ //other keys this.createdAt = new CreatedAt(lte, gte) } }

Estoy seguro de que la mejor respuesta radica en usar las tuberías de validación de NestJS, pero no logré encontrar la que me funciona.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!