พารามิเตอร์“ res” และ“ req” ในฟังก์ชัน Express คืออะไร


183

ในฟังก์ชั่น Express ต่อไปนี้:

app.get('/user/:id', function(req, res){
    res.send('user' + req.params.id);
});

สิ่งที่เป็นreqและres? พวกเขาหมายถึงอะไรพวกเขาหมายถึงอะไรและพวกเขาทำอะไร

ขอบคุณ!


1
req== "request"// res=="response"
nilon

คำตอบ:


270

reqเป็นวัตถุที่มีข้อมูลเกี่ยวกับคำขอ HTTP ที่ทำให้เกิดเหตุการณ์ ในการตอบกลับreqคุณใช้resเพื่อส่งการตอบกลับ HTTP ที่ต้องการกลับไป

พารามิเตอร์เหล่านั้นสามารถตั้งชื่ออะไรก็ได้ คุณสามารถเปลี่ยนรหัสนั้นเป็นรหัสนี้หากชัดเจนยิ่งขึ้น:

app.get('/user/:id', function(request, response){
  response.send('user ' + request.params.id);
});

แก้ไข:

สมมติว่าคุณมีวิธีนี้:

app.get('/people.json', function(request, response) { });

คำขอจะเป็นวัตถุที่มีคุณสมบัติเช่นนี้ (เพื่อตั้งชื่อไม่กี่):

  • request.urlซึ่งจะเกิดขึ้น"/people.json"เมื่อมีการเรียกใช้การกระทำนี้
  • request.methodซึ่งจะเป็น"GET"ในกรณีนี้ดังนั้นการapp.get()โทร
  • อาเรย์ของส่วนหัว HTTP ในrequest.headersประกอบด้วยรายการเช่นrequest.headers.acceptซึ่งคุณสามารถใช้เพื่อกำหนดชนิดของเบราว์เซอร์ที่ทำการร้องขอประเภทของการตอบสนองที่สามารถจัดการไม่ว่าจะเข้าใจการบีบอัด HTTP หรือไม่
  • อาร์เรย์ของพารามิเตอร์สตริงการสืบค้นหากมีพารามิเตอร์ใด ๆ ในrequest.query(เช่น/people.json?foo=barจะส่งผลให้request.query.fooมีสตริง"bar")

ในการตอบสนองต่อคำขอนั้นคุณใช้ออบเจ็กต์การตอบสนองเพื่อสร้างการตอบกลับของคุณ ในการขยายpeople.jsonตัวอย่าง:

app.get('/people.json', function(request, response) {
  // We want to set the content-type header so that the browser understands
  //  the content of the response.
  response.contentType('application/json');

  // Normally, the data is fetched from a database, but we can cheat:
  var people = [
    { name: 'Dave', location: 'Atlanta' },
    { name: 'Santa Claus', location: 'North Pole' },
    { name: 'Man in the Moon', location: 'The Moon' }
  ];

  // Since the request is for a JSON representation of the people, we
  //  should JSON serialize them. The built-in JSON.stringify() function
  //  does that.
  var peopleJSON = JSON.stringify(people);

  // Now, we can use the response object's send method to push that string
  //  of people JSON back to the browser in response to this request:
  response.send(peopleJSON);
});

1
คุณสามารถใช้ขดเพื่อดูการตอบสนองที่มีส่วนหัว
generalhenry

3
คุณอาจต้องการที่จะตรวจสอบ: en.wikipedia.org/wiki/Hypertext_Transfer_Protocol ไม่ใช่เรื่องที่น่าสะอิดสะเอียนนั่นเป็นสิ่งที่พวกเราทุกคนที่พัฒนาเพื่อให้เว็บต้องรู้!
TK-421

7
ใช่นี่ยอดเยี่ยมมากควรอยู่ในหน้าหลักของเว็บไซต์ express.js
Anton

expressnoob - การตอบสนองเป็นวัตถุเช่นเดียวกับวัตถุคำขอ แต่มันมีเขตข้อมูลและวิธีการที่เกี่ยวข้องกับการตอบสนอง โดยปกติจะใช้วิธี send () ของการตอบกลับ send () ยอมรับทั้งกลุ่มที่แตกต่างกันสำหรับอาร์กิวเมนต์แรกซึ่งกลายเป็นเนื้อความการตอบกลับ HTTP และอาร์กิวเมนต์ที่สองคือรหัสตอบกลับ HTTP
grantwparks

7
หากใครกำลังมองหารายละเอียดของการreqและresโครงสร้างที่อธิบายไว้ในเอกสารด่วน: req: expressjs.com/en/api.html#req , res: expressjs.com/en/api.html#res
AKN

25

ผมสังเกตเห็นข้อผิดพลาดอย่างใดอย่างหนึ่งในคำตอบของเดฟวอร์ด (อาจจะมีการเปลี่ยนแปลงเมื่อเร็ว ๆ นี้?): สอบถาม PARAMATERS สตริงอยู่ในไม่request.query request.params(ดูhttps://stackoverflow.com/a/6913287/166530 )

request.params โดยค่าเริ่มต้นจะเต็มไปด้วยค่าของ "การจับคู่ส่วนประกอบ" ในเส้นทางเช่น

app.get('/user/:id', function(request, response){
  response.send('user ' + request.params.id);
});

และหากคุณได้กำหนดค่าด่วนให้ใช้ bodyparser ( app.use(express.bodyParser());) เช่นเดียวกันกับ POST'ed formdata (ดูวิธีเรียกข้อมูลพารามิเตอร์ข้อความค้นหา POST )


6

ขอและตอบกลับ

เพื่อให้เข้าใจถึงลองreqconsole.log(req);


3
สิ่งนี้ไม่ได้ช่วยอะไร ผลลัพธ์ในคอนโซลคือ [วัตถุวัตถุ]
JEC

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