¿Cómo usar los parámetros de consulta en Nest.js?

2 minutos de lectura

avatar de usuario
eva-sama

Soy un estudiante de primer año en Nest.js.

Y mi código de la siguiente manera

  @Get('findByFilter/:params')
  async findByFilter(@Query() query): Promise<Article[]> {

  }

he utilizado postman para probar este enrutador

http://localhost:3000/article/findByFilter/bug?google=1&baidu=2

En realidad, puedo obtener el resultado de la consulta. { google: '1', baidu: '2' }. Pero no tengo claro por qué la URL tiene una cadena 'bug'?

Si elimino esa palabra como

http://localhost:3000/article/findByFilter?google=1&baidu=2

entonces el cartero mostrará el código de estado 404.

En realidad, no necesito la palabra. bugcómo personalizar el enrutador para realizar mi destino al igual que http://localhost:3000/article/findByFilter?google=1&baidu=2

Aquí hay otra pregunta: ¿cómo hacer que varios enrutadores apunten a un método?

avatar de usuario
kim kern

Parámetros de consulta

tienes que quitar :params para que funcione como se esperaba:

@Get('findByFilter')
async findByFilter(@Query() query): Promise<Article[]> {
  // ...
}

Parámetros de ruta

los :param la sintaxis es para parámetros de ruta y coincide con cualquier cadena en una ruta:

@Get('products/:id')
getProduct(@Param('id') id) {

coincide con las rutas

localhost:3000/products/1
localhost:3000/products/2abc
// ...

Comodines de ruta

Para hacer coincidir varios puntos finales con el mismo método, puede usar comodines de ruta:

@Get('other|te*st')

coincidirá

localhost:3000/other
localhost:3000/test
localhost:3000/te123st
// ...

  • Me alegro de verte de nuevo. tu solución funciona para mí. Por cierto, ¿puedes ofrecerme un correo electrónico o algo más? Sabes que soy un estudiante de primer año en Nest and Typeorm. pero a veces tengo que enfrentar algunos problemas, crearé una nueva pregunta sobre el desbordamiento de la pila. Quiero enviarte el enlace si no te importa.

    – Eva-Sama

    3 de marzo de 2019 a las 14:59


  • ¡Me alegro de poder ayudar! 🙂 No te preocupes, reviso todas las preguntas en nest.js con frecuencia. Pero asegúrese de usar la etiqueta correcta [nestjs] en vez de [nest].

    –Kim Kern

    3 de marzo de 2019 a las 15:21


  • Impresionante respuesta.

    – Amiga500

    6 de agosto de 2020 a las 9:42

Si tiene su parámetro como parte o url: /artículos/${articleId}/detallesusarías @Param

@Get('/articles/:ARTICLE_ID/details')
async getDetails(
    @Param('ARTICLE_ID') articleId: string
)

SI desea proporcionar parámetros de consulta /artículo/findByFilter/bug?google=1&baidu=2podrías usar

@Get('/article/findByFilter/bug?')
async find(
    @Query('google') google: number,
    @Query('baidu') baidu: number,
)

  • Excelente. ¡Gracias!

    – rinogo

    23 oct 2021 a las 17:57

podemos usar @Req()

@Get(':framework')
getData(@Req() request: Request): Object {
    return {...request.params, ...request.query};
}

/nido?versión=7

{
    "framework": "nest",
    "version": "7"
}

Lee mas

  • Tuve que poner este código… import { Request } from ‘express’; … encima del script para que esto funcione!

    – Jonathan Martín

    30 de mayo de 2020 a las 0:38


  • @JonathanMartins Siéntase libre de editar mi respuesta

    – Dmitri Grinko

    10 de enero a las 5:09

Puedes usar el @Req decorador, y use el objeto param, vea:

@Get()
  findAll(
    @Req() req: Request
  ): Promise<any[]> {
    console.log(req.query);
    // another code ....
  }

¿Ha sido útil esta solución?