Skip to main content
0

Nest.js Request lifecycle ทำความเข้าใจ Request lifecycle ของ NestJS กัน

สารจากนักเขียน

เมื่อพูดถึง framework ของ node ที่ใช้ทำ server side หลาย ๆ คนก็คงนึกถึง NestJS กัน ซึ่งวันนี้เราจะมาทำความเข้าใจเกี่ยวกับ NestJS เมื่อต้องทำการรับ Request กันว่า lifecycle ของมันเป็นยังไงแล้วแต่ละแบบมันทำหน้าที่อะไรแล้วต่างกันอย่างไร ก่อนอื่นก็มาดู Request lifecycle diagram กัน

เขียนโดย
Thapanon Sodngam
Junior Software Developer

บทความนี้ตีพิมพ์ และ เผยแพร่เมื่อ 29 กันยายน 2566

    1. Middleware
      Middleware เป็นฟังก์ชันที่เรียกก่อนที่ระบบจะดำเนินการตามเส้นทาง (route handler) มีการเข้าถึง Request และ Response และฟังก์ชัน middleware ลำดับต่อไป (next()) ใน lifecycle ของแอปพลิเคชัน ฟังก์ชัน middleware ถัดไปมักมีการใช้ตัวแปรชื่อ next และ Middleware ใน NestJS จะถูกแบ่งออกเป็น 2 ลำดับโดยจะแบ่งการทำงานก่อนหลังตามนี้เลย Global  -> Module โดยแต่จะชั้นก็จะมีหลาย ๆ middleware ต่อกันได้ด้วยนะ

    2. Guards
      Guard ก็ตามชื่อเลยครับจะมีหน้าที่ให้เป็นเป็นผู้ปกป้องนั่นเองเอาจริง ๆ แล้ว Guard บน NestJS ก็มีการ ref มาจาก middleware ของ Express app ที่เราเอาไปใช่ทำหน้าที่เกี่ยวกับ เรื่องความปลอดภัยหรือเรื่องการเข้าถึงข้อมูลต่าง ๆโดย Guard จะมีหลายระดับดังนี้ ได้แก่ Global guards -> Controller guards -> Route guards แล้วลำดับการทำงานก็ตามลูกศรเลยครับ แต่ใน guards แต่ละชั้นก็สามารถมี guards ได้มากกว่า 1 ตัวนะ เวลามันทำงานก็จะเรียงจากลำดับการ decorator จากซ้ายไปขวานั่นเอง
    3. Interceptors
      Interceptors สามารถรับ Request ก่อนที่จะถูกส่งไปยัง Controller, อีกทั้งยังสามารถแก้ไขหรือปรับเปลี่ยน Request และ Response ได้, ทำให้เราสามารถจัดการ Request และ Response ได้อย่างสะดวกและยืดหยุ่นตามความต้องการของเรานั่นเองส่วนลำดับการทำงานของ interceptors ก็จะเป็นดังต่อไปนี้เลย Global interceptors -> Controller interceptors -> Route interceptors -> … -> Route interceptor -> Controller interceptors -> Global interceptors
    4. Pipes
      มีหน้าที่ในการ ตรวจสอบความถูกต้อง (Validate) และ เปลี่ยนแปลง (transformation) ข้อมูลขาเข้านั่นเองยกตัวอย่างเช่น ตรวจสอบว่าเป็น UUID ไหม หรือแปลงข้อมูลไปเป็น Int เป็นต้นโดย Nest จะมี Pipe เริ่มต้นมาให้เราด้วยได้แก่
      – ValidationPipe
      – ParseIntPipe
      – ParseBoolPipe
      – ParseArrayPipe
      – ParseUUIDPipe
      – DefaultValuePipeส่วนลำดับการทำงานของ Pipes ก็จะเป็นดังต่อไปนี้เลย Global pipes -> Controller pipes -> Route pipes
    5. Exception filtersException filters เป็นส่วนหนึ่งของการจัดการข้อผิดพลาด (errors) ในแอปพลิเคชันของเรา โดยมันจะเป็นตัวกำหนดการทำงานเมื่อข้อผิดพลาดเกิดขึ้นในระหว่างการประมวลผล request  หรือ responseและช่วยให้คุณจัดการให้เป็นไปตามที่เราต้องการนั่นเองตัวอย่างเช่นเราต้องการหา data ด้วย id ตัวนึงเพื่อเอาไปใช้งานแต่มันไม่มีอยู่ในระบบมันก็จะแหกปากออกมาว่าไม่มีข้อมูลโว้ยทำงานต่อไม่ได้แล้วหยุดทำงานไปอย่างนั้น แต่ถ้าเราใช้ Exception filters มันก็จะไม่แหกปากแล้วหยุดทำงานไปแต่จะไปทำตามที่เราได้ handle ไว้นั่นเองแล้วลำดับการทำงานก็จะแตกต่างกว่าเพื่อน ๆ หน่อยโดย มันจะทำงานจากหน่วยเล็กก่อนตามนี้เลย Route filters -> Controller filters -> Global filters

    ส่วน Controller คิดว่าทุกคนน่าจะรู้อยู่แล้วว่าทำหน้าที่อะไรนะครับแล้วนี่ก็คือความรู้เกี่ยวกับ Request lifecycle ของ NestJS ที่ผมได้นำมาฝากกันในวันนี้นั่นเองในครั้งต่อ ๆ ไปจะมีอะไรอีกก็รอติดตามได้เลยยยย

    ระบบฝึกทักษะ การเขียนโปรแกรม

    ที่พร้อมตรวจผลงานคุณ 24 ชั่วโมง

    • โจทย์ปัญหากว่า 200 ข้อ ที่รอท้าทายคุณอยู่
    • รองรับ 9 ภาษาโปรแกรมหลัก ไม่ว่าจะ Java, Python, C ก็เขียนได้
    • ใช้งานได้ฟรี ! ครบ 20 ข้อขึ้นไป รับ Certificate ไปเลย !!
    เข้าใช้งานระบบ DevLab ฟรี !เรียนรู้เพิ่มเติม

    เรียนรู้ไอที “อัพสกิลเขียนโปรแกรม” จากตัวจริง
    ปั้นให้คุณเป็น คนสายไอทีระดับมืออาชีพ

    8

    แนะนำสำหรับคุณ

    Close Menu

    เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

    ตั้งค่าความเป็นส่วนตัว

    คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

    ยอมรับทั้งหมด
    จัดการความเป็นส่วนตัว
    • คุกกี้ที่จำเป็น
      เปิดใช้งานตลอด

      ประเภทของคุกกี้มีความจำเป็นสำหรับการทำงานของเว็บไซต์ เพื่อให้คุณสามารถใช้ได้อย่างเป็นปกติ และเข้าชมเว็บไซต์ คุณไม่สามารถปิดการทำงานของคุกกี้นี้ในระบบเว็บไซต์ของเราได้
      รายละเอียดคุกกี้

    • คุกกี้สำหรับการติดตามทางการตลาด

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

    บันทึกการตั้งค่า