สารจากนักเขียน
เมื่อพูดถึง framework ของ node ที่ใช้ทำ server side หลาย ๆ คนก็คงนึกถึง NestJS กัน ซึ่งวันนี้เราจะมาทำความเข้าใจเกี่ยวกับ NestJS เมื่อต้องทำการรับ Request กันว่า lifecycle ของมันเป็นยังไงแล้วแต่ละแบบมันทำหน้าที่อะไรแล้วต่างกันอย่างไร ก่อนอื่นก็มาดู Request lifecycle diagram กัน
เขียนโดย
Thapanon Sodngam
Junior Software Developer
บทความนี้ตีพิมพ์ และ เผยแพร่เมื่อ 29 กันยายน 2566
-
- Middleware
Middleware เป็นฟังก์ชันที่เรียกก่อนที่ระบบจะดำเนินการตามเส้นทาง (route handler) มีการเข้าถึง Request และ Response และฟังก์ชัน middleware ลำดับต่อไป (next()) ใน lifecycle ของแอปพลิเคชัน ฟังก์ชัน middleware ถัดไปมักมีการใช้ตัวแปรชื่อ next และ Middleware ใน NestJS จะถูกแบ่งออกเป็น 2 ลำดับโดยจะแบ่งการทำงานก่อนหลังตามนี้เลย Global -> Module โดยแต่จะชั้นก็จะมีหลาย ๆ middleware ต่อกันได้ด้วยนะ - Guards
Guard ก็ตามชื่อเลยครับจะมีหน้าที่ให้เป็นเป็นผู้ปกป้องนั่นเองเอาจริง ๆ แล้ว Guard บน NestJS ก็มีการ ref มาจาก middleware ของ Express app ที่เราเอาไปใช่ทำหน้าที่เกี่ยวกับ เรื่องความปลอดภัยหรือเรื่องการเข้าถึงข้อมูลต่าง ๆโดย Guard จะมีหลายระดับดังนี้ ได้แก่ Global guards -> Controller guards -> Route guards แล้วลำดับการทำงานก็ตามลูกศรเลยครับ แต่ใน guards แต่ละชั้นก็สามารถมี guards ได้มากกว่า 1 ตัวนะ เวลามันทำงานก็จะเรียงจากลำดับการ decorator จากซ้ายไปขวานั่นเอง - Interceptors
Interceptors สามารถรับ Request ก่อนที่จะถูกส่งไปยัง Controller, อีกทั้งยังสามารถแก้ไขหรือปรับเปลี่ยน Request และ Response ได้, ทำให้เราสามารถจัดการ Request และ Response ได้อย่างสะดวกและยืดหยุ่นตามความต้องการของเรานั่นเองส่วนลำดับการทำงานของ interceptors ก็จะเป็นดังต่อไปนี้เลย Global interceptors -> Controller interceptors -> Route interceptors -> … -> Route interceptor -> Controller interceptors -> Global interceptors - Pipes
มีหน้าที่ในการ ตรวจสอบความถูกต้อง (Validate) และ เปลี่ยนแปลง (transformation) ข้อมูลขาเข้านั่นเองยกตัวอย่างเช่น ตรวจสอบว่าเป็น UUID ไหม หรือแปลงข้อมูลไปเป็น Int เป็นต้นโดย Nest จะมี Pipe เริ่มต้นมาให้เราด้วยได้แก่
– ValidationPipe
– ParseIntPipe
– ParseBoolPipe
– ParseArrayPipe
– ParseUUIDPipe
– DefaultValuePipeส่วนลำดับการทำงานของ Pipes ก็จะเป็นดังต่อไปนี้เลย Global pipes -> Controller pipes -> Route pipes - Exception filtersException filters เป็นส่วนหนึ่งของการจัดการข้อผิดพลาด (errors) ในแอปพลิเคชันของเรา โดยมันจะเป็นตัวกำหนดการทำงานเมื่อข้อผิดพลาดเกิดขึ้นในระหว่างการประมวลผล request หรือ responseและช่วยให้คุณจัดการให้เป็นไปตามที่เราต้องการนั่นเองตัวอย่างเช่นเราต้องการหา data ด้วย id ตัวนึงเพื่อเอาไปใช้งานแต่มันไม่มีอยู่ในระบบมันก็จะแหกปากออกมาว่าไม่มีข้อมูลโว้ยทำงานต่อไม่ได้แล้วหยุดทำงานไปอย่างนั้น แต่ถ้าเราใช้ Exception filters มันก็จะไม่แหกปากแล้วหยุดทำงานไปแต่จะไปทำตามที่เราได้ handle ไว้นั่นเองแล้วลำดับการทำงานก็จะแตกต่างกว่าเพื่อน ๆ หน่อยโดย มันจะทำงานจากหน่วยเล็กก่อนตามนี้เลย Route filters -> Controller filters -> Global filters
- Middleware
ส่วน Controller คิดว่าทุกคนน่าจะรู้อยู่แล้วว่าทำหน้าที่อะไรนะครับแล้วนี่ก็คือความรู้เกี่ยวกับ Request lifecycle ของ NestJS ที่ผมได้นำมาฝากกันในวันนี้นั่นเองในครั้งต่อ ๆ ไปจะมีอะไรอีกก็รอติดตามได้เลยยยย
ระบบฝึกทักษะ การเขียนโปรแกรม
ที่พร้อมตรวจผลงานคุณ 24 ชั่วโมง
- โจทย์ปัญหากว่า 200 ข้อ ที่รอท้าทายคุณอยู่
- รองรับ 9 ภาษาโปรแกรมหลัก ไม่ว่าจะ Java, Python, C ก็เขียนได้
- ใช้งานได้ฟรี ! ครบ 20 ข้อขึ้นไป รับ Certificate ไปเลย !!