ฉันหวังว่าทุกคนจะสามารถอ่านบทความของฉันต่อไปได้ นี่เป็นกำลังใจและการสนับสนุนที่ยิ่งใหญ่ที่สุดสำหรับฉัน ให้เราก้าวหน้าร่วมกันหาเพื่อนผ่านวรรณกรรมและช่วยเหลือซึ่งกันและกัน โอเคไปตรงหัวข้อของวันนี้กันเถอะ
"เชื่อมต่อ" คืออะไรและจะเข้าใจมิดเดิลแวร์ได้อย่างไร? มาดูบทความของวันนี้ด้วยคำถาม
จะเข้าใจ "มิดเดิลแวร์" ได้อย่างไร?
ความเข้าใจของฉันคือมิดเดิลแวร์เป็นสิ่งที่คล้ายกับตัวกรองวิธีจัดการคำขอและการตอบสนองระหว่างไคลเอนต์และแอปพลิเคชัน
หากกระบวนการประมวลผล HTTP ถูกนำมาเปรียบเทียบกับการบำบัดน้ำเสียมิดเดิลแวร์จะเหมือนชั้นของตัวกรอง มิดเดิลแวร์แต่ละคนเขียนคำขอหรือ (และ) ข้อมูลการตอบกลับระหว่างการประมวลผล HTTP
สถานะใช้ฟังก์ชั่นเฉพาะ
"เชื่อมต่อ" คืออะไร?
เราสามารถนึกถึงการเชื่อมต่อเป็นคอลเลกชันของมิดเดิลแวร์จำนวนมาก สำหรับแต่ละคำขอ Connect จะใช้เลเยอร์มิดเดิลแวร์เพื่อกรองคำขอซึ่งแต่ละรายการสามารถรับคำขอ HTTP ได้
TJ Holowaychuk กล่าวถึงการเชื่อมต่อว่ามีมิดเดิลแวร์สองประเภท หนึ่งในนั้นคือตัวกรอง:
ตัวกรองจัดการคำขอ แต่ไม่ตอบสนองต่อคำขอ (คิดว่าบันทึกเซิร์ฟเวอร์)
ประเภทที่สองคือผู้ให้บริการซึ่งตอบสนองต่อคำขอ คุณสามารถใช้มิดเดิลแวร์หลายตัวตามความต้องการของคุณ คำขอ HTTP จะตอบสนองต่อการร้องขอผ่านมิดเดิลแวร์แต่ละตัวจนกว่าจะถึงมิดเดิลแวร์
2. บทนำเกี่ยวกับมิดเดิลแวร์ในตัวของ Connect ในตัว
ต่อไปนี้เป็นมิดเดิลแวร์หลักและตัวอย่างที่อธิบายไว้:
(1), cookieparser ------------------------------------------------------------------------------------------------------------------------------ คุกกี้สามารถเข้ารหัสผ่าน REQ.Secret
การคัดลอกรหัสมีดังนี้:
var connect = ต้องการ ('./ lib/connect');
var app = connect ()
. ใช้ (connect.cookieparser ('สตริงลับ')))
. ใช้ (ฟังก์ชั่น (req, res, ถัดไป) {
req.cookies.website = "สวัสดีฉันเป็น Bigbear!" -
Res.end (json.stringify (req.cookies));
}). ฟัง (8888);
(2) เซสชัน
คำอธิบาย: มิดเดิลแวร์การจัดการเซสชัน
การพึ่งพา: cookieparser
พารามิเตอร์: ตัวเลือก
ตัวเลือก:
คีย์: ชื่อคุกกี้ค่าเริ่มต้นคือ connect.sid
ร้านค้า: อินสแตนซ์การจัดเก็บเซสชัน
ความลับ: การเข้ารหัสคุกกี้เซสชัน
คุกกี้: การกำหนดค่าคุกกี้ของเซสชันค่าเริ่มต้นคือ {path: '/', httponly: true, maxage: null}
พร็อกซี: พร็อกซีย้อนกลับสำหรับคุกกี้ที่ปลอดภัยดำเนินการผ่าน X-Forwarded-Proto
ตัวเลือกคุกกี้:
COOKIE.MAXAGE: ค่าเริ่มต้นเป็นโมฆะแสดงว่าคุกกี้ถูกลบเมื่อเบราว์เซอร์ปิด
การคัดลอกรหัสมีดังนี้:
var connect = ต้องการ ('./ lib/connect');
var app = connect ()
. ใช้ (connect.logger ('dev'))
. ใช้ (connect.cookieparser ())
.use (Connect.session ({Secret: '123', คุกกี้: {maxage: 60000}})))
. ใช้ (ฟังก์ชั่น (req, res, ถัดไป) {
if (req.session.pv) {
Res.SetheAder ('ประเภทเนื้อหา', 'ข้อความ/html');
res.write ('มุมมอง:' + req.session.pv);
res.end ();
req.session.pv ++;
}อื่น{
req.session.pv = 1;
Res.end ('Refresh');
-
-
.Listen (8888);
เนื่องจากไคลเอนต์รีเฟรชหน้า "PV" อย่างต่อเนื่องและจำนวนการบำรุงรักษาในเซสชัน "เซสชัน" เซิร์ฟเวอร์ "จะเพิ่มขึ้นเรื่อย ๆ
(3), BodyParser ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
การคัดลอกรหัสมีดังนี้:
var connect = ต้องการ ('เชื่อมต่อ');
var app = connect ()
. ใช้ (connect.bodyparser ())
. ใช้ (ฟังก์ชั่น (req, res) {
res.end ('req.body =>' + json.stringify (req.body));
-
.Listen (8888);
ประการที่สามลองมาตัวอย่างเปรียบเทียบ และดูประโยชน์ของการใช้มิดเดิลแวร์
การคัดลอกรหัสมีดังนี้:
-
* การประมวลผลไฟล์แบบคงที่ใช้โดยใช้ Connect
-
var connect = ต้องการ ('เชื่อมต่อ');
Connect (connect.static (__ dirname + '/public'' )).listen(//listen
8888
การทำงาน() {
console.log ('เชื่อมต่อเริ่มต้นที่พอร์ต 8888');
-
-
-
* การใช้งานโดยใช้ Node Native API
-
var http = ต้องการ ('http');
http.createserver (
ฟังก์ชั่น (req, res) {
var url = ต้องการ ('url');
var fs = ต้องการ ('fs');
var pathName = __dirName + '/public' + url.parse (req.url) .pathName;
// อ่านไฟล์โลคัล
fs.readfile (
ชื่อพา ธ
ฟังก์ชั่น (err, data) {
// การจัดการข้อยกเว้น
ถ้า (err) {
res.writehead (500);
Res.end ('500');
-
อื่น {
Res.end (ข้อมูล);
-
-
-
-
) .Listen (// ฟัง
8888
การทำงาน() {
console.log ('เซิร์ฟเวอร์ HTTP เริ่มต้นที่พอร์ต 8888');
-
-
แม้ว่า Node Native API ได้ใช้รหัสหลายบรรทัดไปแล้ว แต่ก็ยังคงทิ้งเซิร์ฟเวอร์ไฟล์แบบคงที่อย่างง่าย ๆ ที่ยังไม่ได้ประมวลผล
ตัวอย่างเช่น: 404 และข้อยกเว้นอื่น ๆ ไม่ได้ประมวลผลไม่มีการตรวจสอบความปลอดภัยของเส้นทางไฟล์พื้นฐาน (อันที่จริงเราสามารถเข้าถึงระบบไฟล์ระบบปฏิบัติการทั้งหมด) การจัดการข้อยกเว้นส่วนกลาง ฯลฯ
ในเวลาเดียวกัน Connect ได้จัดการปัญหาเหล่านี้ทั้งหมดแล้ว
สี่มาสรุปกันเถอะ
(1) เข้าใจการประมวลผลการสตรีมมิดเดิลแวร์
การคัดลอกรหัสมีดังนี้:
var app = connect ();
App.use (Connect.staticCache ());
app.use (connect.static (__ dirname + '/public'));
App.use (Connect.CookieParser ());
App.use (Connect.session ());
App.use (Connect.Query ());
app.use (connect.bodyparser ());
app.use (connect.csrf ());
app.use (function (req, res, ถัดไป) {
// มิดเดิลแวร์
-
app.listen (8888);
(2) ความแตกต่างระหว่างวิธีการใช้งานดั้งเดิมและการใช้งานมิดเดิลแวร์
(3) ผ่านตัวอย่างข้างต้นของมิดเดิลแวร์เราสามารถเข้าใจสถานการณ์การใช้งานและการใช้งานและอ้างอิงเอกสารที่เกี่ยวข้องเพื่อฝึกฝนการใช้งานขั้นพื้นฐานของมิดเดิลแวร์อื่น ๆ