ก่อนที่จะเข้าใจnext
คุณจำเป็นต้องมีความคิดเล็กน้อยเกี่ยวกับวงจรการตอบสนองคำขอในโหนดแม้ว่าจะมีรายละเอียดไม่มากนัก มันเริ่มต้นด้วยการที่คุณทำการร้องขอ HTTP สำหรับทรัพยากรเฉพาะและจะสิ้นสุดลงเมื่อคุณส่งการตอบกลับกลับไปยังผู้ใช้เช่นเมื่อคุณพบสิ่งที่ต้องการ res.send ('Hello World');
ลองมาดูตัวอย่างที่ง่ายมาก
app.get('/hello', function (req, res, next) {
res.send('USER')
})
ที่นี่เราไม่จำเป็นต้องต่อไป () เพราะ resp.send จะสิ้นสุดรอบและมอบการควบคุมกลับไปที่มิดเดิลแวร์ของเส้นทาง
ตอนนี้ลองมาดูตัวอย่างอื่น
app.get('/hello', function (req, res, next) {
res.send("Hello World !!!!");
});
app.get('/hello', function (req, res, next) {
res.send("Hello Planet !!!!");
});
ที่นี่เรามีฟังก์ชั่นมิดเดิลแวร์ 2 รายการสำหรับเส้นทางเดียวกัน แต่คุณจะได้รับคำตอบจากคนแรกเสมอ เพราะที่ติดตั้งครั้งแรกในมิดเดิลแวร์สแต็คและ res.send จะสิ้นสุดรอบ
แต่ถ้าเราไม่ต้องการ“ Hello World !!!!” ตอบกลับ สำหรับเงื่อนไขบางอย่างเราอาจต้องการ "Hello Planet !!!!" คำตอบ ลองแก้ไขโค้ดด้านบนและดูว่าเกิดอะไรขึ้น
app.get('/hello', function (req, res, next) {
if(some condition){
next();
return;
}
res.send("Hello World !!!!");
});
app.get('/hello', function (req, res, next) {
res.send("Hello Planet !!!!");
});
สิ่งที่next
ทำอะไรที่นี่ และใช่คุณอาจมี gusses มันจะข้ามฟังก์ชันมิดเดิลแวร์แรกหากเงื่อนไขเป็นจริงและเรียกใช้ฟังก์ชันมิดเดิลแวร์ถัดไปและคุณจะได้รับการ"Hello Planet !!!!"
ตอบกลับ
ดังนั้นถัดไปผ่านการควบคุมไปยังฟังก์ชั่นถัดไปในกองกลางมิดเดิลแวร์
จะเกิดอะไรขึ้นถ้าฟังก์ชั่นมิดเดิลแวร์แรกไม่ส่งการตอบกลับใด ๆ แต่ทำการประมวลผลตรรกะแล้วคุณจะได้รับการตอบกลับจากฟังก์ชั่นมิดเดิลแวร์ที่สอง
สิ่งที่ต้องการด้านล่าง: -
app.get('/hello', function (req, res, next) {
// Your piece of logic
next();
});
app.get('/hello', function (req, res, next) {
res.send("Hello !!!!");
});
ในกรณีนี้คุณจำเป็นต้องเรียกใช้ทั้งฟังก์ชันมิดเดิลแวร์ ดังนั้นวิธีเดียวที่คุณเข้าถึงมิดเดิลแวร์ฟังก์ชั่นที่สองคือการโทรถัดไป ();
เกิดอะไรขึ้นถ้าคุณไม่โทรไปที่ถัดไป อย่าคาดหวังว่าฟังก์ชันมิดเดิลแวร์ที่สองจะเรียกใช้โดยอัตโนมัติ หลังจากเรียกฟังก์ชั่นแรกคำขอของคุณจะถูกปล่อยให้แขวน ฟังก์ชั่นที่สองจะไม่ถูกเรียกใช้และคุณจะไม่ได้รับการตอบกลับ
res.send
ในการดำเนินการตามคำขอ หากไม่มีอยู่อาจมีตัวจัดการอื่นที่จะออกข้อผิดพลาดและดำเนินการตามคำขอให้เสร็จสมบูรณ์