javascript - วิธีการใช้พารามิเตอร์ในการสอบถามใน Nest.js?
ฉันเป็นนักศึกษาใหม่ใน Nest.js
และโค้ดของฉันดังด้านล่าง
@Get('findByFilter/:params')
async findByFilter(@Query() query): Promise<Article[]> {
}
ฉันได้ใช้ postman เพื่อทดสอบเราเตอร์นี้
http://localhost:3000/article/findByFilter/bug?google=1&baidu=2
จริงๆ แล้ว ฉันสามารถได้ผลลัพธ์ของการค้นหา { google: '1', baidu: '2' } แต่ฉันไม่เข้าใจว่าทำไม URL ถึงมีสตริง 'bug'?
ถ้าฉันลบคำนั้นออกไปเหมือนกับ
http://localhost:3000/article/findByFilter?google=1&baidu=2
แล้วพนักงานส่งจดหมายจะแสดงรหัสสถานะ 404
จริง ๆ แล้ว ฉันไม่ต้องการคำว่า bug วิธีปรับแต่งเราเตอร์เพื่อให้บรรลุเป้าหมายของฉันเหมือนกับ http://localhost:3000/article/findByFilter?google=1&baidu=2
อีกคำถามหนึ่งคือวิธีทำให้หลายตัวกำหนดเส้นทางชี้ไปยังวิธีเดียวกันได้อย่างไร?
คำตอบ #1
พารามิเตอร์ของคำค้น
คุณต้องลบ :params ออกเพื่อให้มันทำงานตามที่คาดไว้:
@Get('findByFilter')
async findByFilter(@Query() query): Promise<Article[]> {
// ...
}
พารามิเตอร์เส้นทาง
ไวยากรณ์ :param สำหรับพารามิเตอร์เส้นทางและตรงกับสตริงใด ๆ บนเส้นทาง:
@Get('products/:id')
getProduct(@Param('id') id) {
ตรงกับเส้นทาง
localhost:3000/products/1
localhost:3000/products/2abc
// ...
ไวลด์การ์ดของเส้นทาง
ในการจับคู่หลาย endpoints กับเมทอดเดียวกัน คุณสามารถใช้ route wildcards:
@Get('other|te*st')
จะเข้ากัน
localhost:3000/other
localhost:3000/test
localhost:3000/te123st
// ...
คำตอบ #2
ถ้าคุณมีพารามิเตอร์เป็นส่วนหนึ่งของ URL: /articles/$ {articleId}/details คุณจะใช้ @Param
@Get('/articles/:ARTICLE_ID/details')
async getDetails(
@Param('ARTICLE_ID') articleId: string
)
หากคุณต้องการระบุพารามิเตอร์การค้นหา /article/findByFilter/bug?google=1&baidu=2 คุณสามารถใช้
@Get('/article/findByFilter/bug')
async find(
@Query('google') google: number,
@Query('baidu') baidu: number,
)
แก้ไข: ส่วนของเส้นทาง (/article/findByFilter/bug) ไม่ควรมีเครื่องหมายคำถามต่อท้ายแม้ว่าคุณจะคาดหวังพารามิเตอร์คำค้น เมื่อคุณระบุเครื่องหมายคำถาม (เช่น /article/findByFilter/bug?) จะทำให้ตัวอักษร g ตัวสุดท้ายกลายเป็นตัวเลือก เนื่องจากสตริงนี้ถูกจัดการเป็น regex
คำตอบ #3
เราสามารถใช้ @Req()
import { Controller, Get, Req } from '@nestjs/common';
import { Request } from 'express';
(...)
@Get(':framework')
getData(@Req() request: Request): Object {
return {...request.params, ...request.query};
}
/รัง?version=7
{
"framework": "nest",
"version": "7"
}
อ่านเพิ่มเติม
