Koa.js - เรียงซ้อน

ฟังก์ชันมิดเดิลแวร์คือฟังก์ชันที่สามารถเข้าถึงไฟล์ context objectและฟังก์ชันมิดเดิลแวร์ถัดไปในวงจรการตอบสนองคำขอของแอปพลิเคชัน ฟังก์ชันเหล่านี้ใช้เพื่อปรับเปลี่ยนคำร้องขอและอ็อบเจ็กต์การตอบสนองสำหรับงานเช่นการแยกวิเคราะห์เนื้อหาคำร้องขอการเพิ่มส่วนหัวการตอบสนองเป็นต้น Koa ก้าวไปอีกขั้นด้วยการให้'downstream'จากนั้นจึงเลื่อนการควบคุมกลับ 'upstream'. ผลกระทบนี้เรียกว่าcascading.

ต่อไปนี้เป็นตัวอย่างง่ายๆของฟังก์ชันมิดเดิลแวร์ที่กำลังทำงานอยู่

var koa = require('koa');
var app = koa();
var _ = router();

//Simple request time logger
app.use(function* (next) {
   console.log("A new request received at " + Date.now());
   
   //This function call is very important. It tells that more processing is 
   //required for the current request and is in the next middleware function/route handler.
   yield next;
});

app.listen(3000);

มิดเดิลแวร์ข้างต้นเรียกว่าสำหรับทุกคำขอบนเซิร์ฟเวอร์ ดังนั้นหลังจากการร้องขอทุกครั้งเราจะได้รับข้อความต่อไปนี้ในคอนโซล

A new request received at 1467267512545

หากต้องการ จำกัด เส้นทางเฉพาะ (และรูทย่อยทั้งหมด) เราเพียงแค่ต้องสร้างเส้นทางเช่นเดียวกับที่เราทำในการกำหนดเส้นทาง อันที่จริงมันเป็นมิดเดิลแวร์เหล่านี้เท่านั้นที่จัดการคำขอของเรา

ตัวอย่างเช่น,

var koa = require('koa');
var router = require('koa-router');
var app = koa();

var _ = router();

//Simple request time logger
_.get('/request/*', function* (next) {
   console.log("A new request received at " + Date.now());
   yield next;
});

app.use(_.routes());
app.listen(3000);

ตอนนี้เมื่อใดก็ตามที่คุณร้องขอรูทย่อยของ '/ request' ระบบจะบันทึกเวลาเท่านั้น

ลำดับการโทรของมิดเดิลแวร์

สิ่งที่สำคัญที่สุดอย่างหนึ่งเกี่ยวกับมิดเดิลแวร์ใน Koa คือลำดับที่เขียน / รวมไว้ในไฟล์ของคุณคือลำดับที่จะดำเนินการต่อท้ายสตรีม ทันทีที่เรากดคำสั่งอัตราผลตอบแทนในมิดเดิลแวร์มันจะเปลี่ยนเป็นมิดเดิลแวร์ถัดไปในบรรทัดจนกว่าเราจะไปถึงอันสุดท้าย จากนั้นอีกครั้งเราจะเริ่มการสำรองข้อมูลและเรียกคืนฟังก์ชันจากคำสั่งผลตอบแทน

ตัวอย่างเช่นในข้อมูลโค้ดต่อไปนี้ฟังก์ชันแรกจะดำเนินการก่อนจนกว่าจะได้ผลจากนั้นมิดเดิลแวร์ที่สองจนกว่าจะให้ผลตามด้วยฟังก์ชันที่สาม เนื่องจากเราไม่มีมิดเดิลแวร์อีกต่อไปแล้วเราจึงเริ่มทำการสำรองข้อมูลโดยดำเนินการในลำดับย้อนกลับคือสามวินาทีแรก ตัวอย่างนี้สรุปวิธีการใช้มิดเดิลแวร์ด้วยวิธี Koa

var koa = require('koa');
var app = koa();

//Order of middlewares
app.use(first);
app.use(second);
app.use(third);

function *first(next) {
   console.log("I'll be logged first. ");
   
   //Now we yield to the next middleware
   yield next;
   
   //We'll come back here at the end after all other middlewares have ended
   console.log("I'll be logged last. ");
};

function *second(next) {
   console.log("I'll be logged second. ");
   yield next;
   console.log("I'll be logged fifth. ");
};

function *third(next) {
   console.log("I'll be logged third. ");
   yield next;
   console.log("I'll be logged fourth. ");
};

app.listen(3000);

เมื่อเราไปที่ '/' หลังจากเรียกใช้รหัสนี้บนคอนโซลของเราเราจะได้รับ -

I'll be logged first. 
I'll be logged second. 
I'll be logged third. 
I'll be logged fourth. 
I'll be logged fifth. 
I'll be logged last.

แผนภาพต่อไปนี้สรุปสิ่งที่เกิดขึ้นจริงในตัวอย่างข้างต้น

ตอนนี้เรารู้วิธีสร้างมิดเดิลแวร์ของเราเองแล้วให้เราพูดคุยเกี่ยวกับมิดเดิลแวร์ที่สร้างโดยชุมชนที่ใช้บ่อยที่สุด

ตัวกลางของบุคคลที่สาม

รายชื่อตัวกลางของบุคคลที่สามสำหรับ Express มีอยู่ที่นี่ ต่อไปนี้เป็นมิดเดิลแวร์ที่ใช้บ่อยที่สุด -

  • koa-bodyparser
  • koa-router
  • koa-static
  • koa-compress

เราจะพูดถึงมิดเดิลแวร์หลายตัวในบทต่อ ๆ ไป