req.query และ req.param ใน ExpressJS


93

ความแตกต่างหลักระหว่างreq.queryและreq.paramใน Express

  • ทั้งสองแตกต่างกันอย่างไร
  • เมื่อใดจึงจะใช้ในกรณีใด

สมมติว่าลูกค้าส่งพูดคู่ Android (Key, value) ในคำขอ ........ จะใช้อันไหนดี?

[แก้ไข]

สมมติว่า android ส่งคำขอ POST -> Intention คือการส่ง (Key, Value) ไปยังไคลเอนต์และเซิร์ฟเวอร์ควรดำเนินการสืบค้นฐานข้อมูลตามค่าในเซิร์ฟเวอร์และส่งคืนการตอบสนอง JSON

ดู :: ที่คำถามนี้สำหรับโปรแกรมที่ผมอ้างอิง: : โปรแกรมเอ็กซ์เพรสง่ายสำหรับการสอบถามผล


1
คุณหมายถึงreq.queryและreq.param?
arb

1
ใช่! ......... ฉันได้แก้ไขคำถามแล้วด้วย

คำตอบ:


119

req.query จะส่งคืนออบเจ็กต์ JS หลังจากแยกวิเคราะห์สตริงแบบสอบถาม

/ user? name = tom & age = 55 - req.queryจะให้ผล{name:"tom", age: "55"}

req.paramsจะส่งคืนพารามิเตอร์ในเส้นทางที่ตรงกัน หากเส้นทางของคุณคือ/ user /: idและคุณส่งคำขอไปยัง/ user / 5 - req.paramsจะให้ผล{id: "5"}

req.paramเป็นฟังก์ชันที่ลอกพารามิเตอร์ออกจากคำขอ ทั้งหมดนี้สามารถพบได้ที่นี่

อัปเดต

หากคำกริยาคือ a POSTและคุณกำลังใช้bodyParserคุณควรจะได้รับรูปแบบที่คุณใช้งานreq.bodyได้ นั่นจะเป็นเวอร์ชัน JS ที่แยกวิเคราะห์ของPOSTฟอร์ม ed


ขอบคุณแล้วสมมติว่าลูกค้าส่งพูดว่า Android (Key, value) เป็นคู่ในคำขอ ........ จะใช้อันไหนใน Express

ไม่มีวิธีใดที่จะตอบคำถามนี้โดยไม่เห็นคำขอที่เป็นปัญหา
arb

โปรดดูคำถามที่อัปเดตแล้ว ..... ฉันได้กล่าวถึงลิงก์ไปยังโปรแกรมที่ฉันใช้งานด่วนในหนึ่งในคำถามที่ฉันโพสต์ ..... โปรดเพิ่มฟีดกลับ!

@ เล่นถ้าคำตอบนี้ช่วยคุณได้โปรดพิจารณาทำเครื่องหมายว่าเป็นคำตอบสำหรับคำถามนี้ ขอบคุณ.
arb

16

req.queryเป็นสตริงแบบสอบถามที่ส่งไปยังเซิร์ฟเวอร์ตัวอย่าง/page?ทดสอบ = 1 , req.paramเป็นพารามิเตอร์ที่ส่งผ่านไปยังตัวจัดการ

app.get('/user/:id', handler);จะไป/user/blah, req.param.idจะกลับมาblah;


ขอบคุณแล้วสมมติว่าลูกค้าส่งพูดว่า Android (Key, value) เป็นคู่ในคำขอ ........ จะใช้อันไหนดี?

1
ฉันไม่รู้ว่าคุณกำลังพูดถึงอะไรถ้าเป็นคำขอ POST มันจะอยู่ในreq.dataถ้าเป็น GET จะเข้าreq.param
OneOfOne

สวัสดีคุณช่วยบอกวิธีตรวจสอบ req.params กับ undefined ได้ไหม
Arj 1411

@AnandRaj มันจะว่างเปล่าดังนั้นตรวจสอบc.Param("id") == ""
OneOfOne

@OneOfOne ขอบคุณสำหรับการตอบกลับของคุณ ให้ฉันตรวจสอบและจะอัปเดตให้คุณ
Arj 1411

14

ฉันขอแนะนำให้ใช้สิ่งต่อไปนี้

req.param('<param_name>')

req.param ("") ทำงานดังต่อไปนี้

การค้นหาจะดำเนินการตามลำดับต่อไปนี้:

req.params
req.body
req.query

การเข้าถึงโดยตรงไปยัง req.body, req.params และ req.query เพื่อความชัดเจน - เว้นแต่คุณจะยอมรับอินพุตจากแต่ละออบเจ็กต์อย่างแท้จริง

อ้างอิง: http://expressjs.com/4x/api.html#req.param


1
สวัสดีคุณช่วยบอกวิธีตรวจสอบ req.params กับ undefined ได้ไหม
Arj 1411

@AnandRaj undefined หมายความว่ายังไง? คุณหมายถึงไม่รู้จัก params?
Abhijit Gaikwad

สิ่งที่ฉันหมายถึงคือเมื่อฉันตรวจสอบประเภทของ req.params ที่แสดงไม่ได้กำหนด เป้าหมายของฉันคือตรวจสอบว่า req.params <พารามิเตอร์ URI ใด ๆ > เป็นโมฆะหรือไม่
Arj 1411

@AnandRaj คุณช่วยโพสต์รหัสของคุณได้ไหม? รหัสต่อไปนี้ใช้ได้กับฉัน var express = ต้องใช้ ('express'); var app = ด่วน (); app.get ('/', ฟังก์ชัน (req, res) {console.log (req.params); res.send (req.params);}); app.listen (3000);
Abhijit Gaikwad

@AnandRaj ลองถ้า (reqParams.hasOwnProperty ('deviceType')) {}
Abhijit Gaikwad

11

ผ่านพารามิเตอร์

GET request to "/cars/honda" 

ส่งคืนรายการรุ่นรถยนต์ Honda

กำลังส่งแบบสอบถาม

GET request to "/car/honda?color=blue"

ส่งคืนรายการรุ่นรถ Honda แต่กรองแล้วจึงส่งคืนเฉพาะรุ่นที่มีสีสต็อกเป็นสีน้ำเงินเท่านั้น

การเพิ่มตัวกรองเหล่านั้นลงในพารามิเตอร์ URL (/ car / honda / color / blue) ไม่สมเหตุสมผลเพราะตาม REST นั่นหมายความว่าเราต้องการรับข้อมูลจำนวนมากเกี่ยวกับสี "สีน้ำเงิน" เนื่องจากสิ่งที่เราต้องการจริงๆคือรายการรุ่น Honda ที่กรองแล้วเราจึงใช้สตริงการสืบค้นเพื่อกรองผลลัพธ์ที่ได้รับกลับมา

สังเกตว่าสตริงการสืบค้นเป็นเพียงคู่ {key: value} ในรูปแบบที่แตกต่างกันเล็กน้อย:? key1 = value1 & key2 = value2 & key3 = value3

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.