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
