Skip to main content
0

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

เมื่อพูดถึง 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 ฟรี !เรียนรู้เพิ่มเติม

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

    BorntoDev

    Author BorntoDev

    BorntoDev Co., Ltd.

    More posts by BorntoDev

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

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

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

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

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

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

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

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