22
votes

Comment utiliser les paramètres de requête dans Nest.js?

Je suis un étudiant de première année dans Nest.js.

Et mon code comme ci-dessous

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

  }

J'ai utilisé le postman pour tester ce routeur

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

En fait, je peux obtenir le résultat de la requête { google: '1', baidu: '2' } . Mais je ne sais pas pourquoi l'URL a une chaîne 'bug' ?

Si je supprime ce mot comme

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

puis le facteur affichera statusCode 404 .

En fait, je n'ai pas besoin du mot bug , comment personnaliser le routeur pour réaliser ma destination, tout comme http://localhost:3000/article/findByFilter?google=1&baidu=2

Voici une autre question: comment faire pointer plusieurs routeurs vers une méthode?


0 commentaires

3 Réponses :


43
votes

Paramètres de requête

Vous devez supprimer :params pour que cela fonctionne comme prévu:

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

Paramètres de chemin

La syntaxe :param est pour les paramètres de chemin et correspond à n'importe quelle chaîne sur un chemin:

@Get('other|te*st')

correspond aux itinéraires

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

Caractères génériques d'itinéraire

Pour faire correspondre plusieurs points de terminaison à la même méthode, vous pouvez utiliser des caractères génériques de route:

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

correspondra

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

3 commentaires

heureux de vous revoir. votre solution fonctionne pour moi. btw, pouvez-vous m'offrir un e-mail ou autre chose, vous savez que je suis un étudiant de première année dans le nid et le typeorm. mais parfois je dois faire face à des problèmes, je vais créer une nouvelle question sur le débordement de pile. Je veux t'envoyer le lien si ça ne te dérange pas.


Heureux d'avoir pu aider! :-) Pas de soucis, je vérifie fréquemment toutes les questions sur nest.js. Mais assurez-vous d'utiliser la bonne balise [nestjs] au lieu de [nest].


Réponse géniale.



2
votes

on peut utiliser @Req ()

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

/ nest? version = 7

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

Lire la suite


1 commentaires

J'ai dû mettre ce code ... import {Request} de 'express'; ... en plus du script pour que cela fonctionne!



0
votes

Vous pouvez utiliser le décorateur @Req et utiliser l'objet param, voir:

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


0 commentaires