es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo pasar @Param y @Query en la misma solicitud en NestJS

Tengo esta ruta configurada:

  @Get('/name/like')
  findByLikeName(@Query() query: { supplierID: string; name: string }) {
    return this.supplierProductService.findByLikeName(query);
  }

La cual utiliza los parámetros de consulta en el servicio subyacente:

  async findByLikeName({
    supplierID,
    name,
  }: {
    supplierID: string;
    name: string;
  }): Promise<SupplierProduct[]> {
    return await this.supplierProductRepository.findAll({
      where: {
        name: {
          [Op.like]: `%${name}%`,
        },
        supplierID: supplierID,
      },
    });
  }

Sin embargo, digamos que quiero mover el supplierID a un parámetro de ruta /:supplierID, manteniendo el nombre (y otros posibles parámetros de consulta) en el objeto de consulta, ¿cómo implementaría esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para mover el supplierID a un parámetro de ruta /:supplierID mientras se mantiene name (y potencialmente otros parámetros de consulta) en el objeto de consulta, se puede hacer lo siguiente:

    1. Cambie la ruta para incluir el parámetro :supplierID en la ruta:
    @Get('/:supplierID/name/like')
    
    1. Modifique el método findByLikeName para usar RouteParams en lugar de Query para extraer el parámetro supplierID de la ruta:
    import { RouteParams } from '@nestjs/common';
    
    // ...
    
        findByLikeName(@Query() query: { name: string }, @RouteParams() params: { supplierID: string }) {
            return this.supplierProductService.findByLikeName(params, query);
        }
    
    // ...
    
        async findByLikeName(
            { supplierID, name }: { supplierID: string; name: string },
            { } // otros parámetros de consulta pueden seguir siendo pasados como un objeto vacío
        ): Promise<supplierproduct[]> {
            return await this.supplierProductRepository.findAll({
                where: {
                    name: {
                        [Op.like]: `%${name}%`,
                    },
                    supplierID: supplierID,
                },
            });
        }
    

    Al hacer esto, el parámetro supplierID se extrae de la propia ruta, mientras que el parámetro name (y otros parámetros de consulta) se pueden pasar a través del objeto de consulta.</supplierproduct[]>

Comments are closed.