javascript - Hvordan bruke spørringsparametere i Nest.js?


Jeg er en førstegangsstudent i Nest.js.

Og koden min er som nedenfor

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

  }

Jeg har brukt postman for å teste denne ruteren

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

Faktisk kan jeg få spørringsresultatet { google: '1', baidu: '2' }. Men jeg er ikke sikker på hvorfor URL-en har en streng 'bug'?

Hvis jeg sletter det ordet akkurat som

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

da vil postmannen vise statusCode 404.

Faktisk trenger jeg ikke ordet bug, hvordan kan jeg tilpasse ruteren for å nå målet mitt akkurat som http://localhost:3000/article/findByFilter?google=1&baidu=2

Her er et annet spørsmål: hvordan kan man få flere rutere til å peke til én metode?

Svar #1

Spørringsparametere

Du må fjerne :params for at det skal fungere som forventet:

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

Stiparametere

Syntaksen :param er for sti-parametere og matcher hvilken som helst streng i en sti:

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

matcher rutene

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

Rute jokertegn

For å matche flere endepunkter til den samme metoden, kan du bruke rute-wildcards:

@Get('other|te*st')

vil matche

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

Svar #2

Hvis du har parameteren din som en del av URL-en: /articles/$ {articleId}/details, vil du bruke @Param

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

HVIS du vil oppgi spørringsparametere /article/findByFilter/bug?google=1&baidu=2, kan du bruke

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

REDIGER: Sti-delen (/article/findByFilter/bug) skal ikke ha et avsluttende spørsmålstegn selv om du forventer spørringsparametre. Når du spesifiserer et spørsmålstegn (som /article/findByFilter/bug?) gjør det den siste g valgfri, siden denne strengen behandles som et regex.

Svar #3

Vi kan bruke @Req()

import { Controller, Get, Req } from '@nestjs/common';
import { Request } from 'express';

(...)

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

/nest?version=7

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

les mer

Relaterte artikler