วันที่ 39 ของการเรียนรู้ MERN Stack
ผมกำลังอยู่ในวันที่ 39 ของการเดินทางเรียนรู้ MERN stack
เมื่อวานผมได้ศึกษาเรื่อง HTTP verbs อย่าง GET และ POST ส่วนวันนี้ผมเน้นไปที่การทำงานฝั่ง backend โดยได้ศึกษาเรื่องการจัดการ data streams และการทำ body parsing ของเซิร์ฟเวอร์
เมื่อผู้ใช้ส่งฟอร์มหรือไฟล์ เซิร์ฟเวอร์จะไม่ได้รับข้อมูลทั้งหมดในคราวเดียว แต่ข้อมูลจะถูกส่งมาเป็นชิ้นเล็กๆ ซึ่งเราเรียกชิ้นส่วนเหล่านี้ว่า chunks
Node.js ใช้ streams เพื่อประหยัดหน่วยความจำ โดยจะไม่โหลดไฟล์ขนาดใหญ่ลงในหน่วยความจำของเซิร์ฟเวอร์ในทันที แต่จะจัดการข้อมูลเป็นส่วนเล็กๆ แทน
กระบวนการทำงานเป็นดังนี้:
- ข้อมูล POST ที่ส่งเข้ามาจะทำหน้าที่เป็น Readable Stream
- เซิร์ฟเวอร์จะได้รับข้อมูล binary ขนาดเล็กเป็น chunks
- คุณต้องรวบรวม chunks เหล่านี้ก่อนที่จะนำข้อมูลไปใช้งาน
ใน Node.js คุณจะไม่ได้รับ request body ในทันที แต่คุณต้องคอยฟัง (listen) event ของเครือข่ายที่เฉพาะเจาะจง:
req.on("data"): event นี้จะทำงานทุกครั้งที่มี chunk ใหม่ส่งมา โดยคุณต้องบันทึก chunk เหล่านี้ไว้ใน arrayreq.on("end"): event นี้จะทำงานเมื่อ stream สิ้นสุดลง ซึ่งเป็นการบอกว่าข้อมูลทั้งหมดมาถึงครบแล้ว
คุณจะใช้ Buffer.concat เพื่อรวมชิ้นส่วนเหล่านั้นเข้าด้วยกัน จากนั้นจึงแปลงให้เป็น string
วิธีนี้ช่วยให้เซิร์ฟเวอร์ของคุณทำงานได้รวดเร็วและมีประสิทธิภาพ อีกทั้งยังช่วยป้องกันปัญหาหน่วยความจำเต็ม (memory crash) เมื่อต้องจัดการกับไฟล์ขนาดใหญ่
แหล่งที่มา: https://dev.to/ali_hamza_589ec7b3eb6688d/day-39-of-learning-mern-stack-hkp