ในปี 2021 JavaScript เป็นภาษาโปรแกรมที่ใช้กันอย่างแพร่หลายมากที่สุด
ความน่าดึงดูดใจของเทคโนโลยีนี้ไม่อาจปฏิเสธได้ เนื่องจากเห็นได้จากกรอบงานจำนวนมากที่เปิดใช้งานการเขียนโปรแกรม JavaScript
มี Angular, React และ Vue ที่ส่วนหน้ารวมถึง Express และ Next ที่ส่วนหลังเพื่อกล่าวถึงบางส่วน
ด้วยเฟรมเวิร์กที่ยอดเยี่ยมมากมายสำหรับการเขียนโปรแกรมแบ็กเอนด์ใน JavaScript ที่เข้าถึงได้ คุณอาจกำลังคิดว่าเหตุใดฉันจึงค้นหาสิ่งที่แตกต่างออกไปแทนที่จะใช้ Express หรือ Next
บางทีคุณอาจต้องเริ่มต้นกระบวนการพัฒนาอย่างรวดเร็วด้วยต้นแบบที่เหมาะสม และไม่เพียงเพิ่มตัวควบคุมใหม่เท่านั้น แต่ยังรวมถึงบริการต่างๆ ที่ทำให้คุณไม่สบายด้วย
หรือคุณต้องการสร้างซอฟต์แวร์ขนาดใหญ่ที่ปรับขนาดได้ซึ่งง่ายต่อการจัดการ หรือบางทีคุณอาจต้องการทำงานในลักษณะที่มีประสิทธิภาพและสะดวกมากขึ้น
ไม่ว่ากรณีของคุณจะเป็นเช่นไรก็ตาม Nest.js สามารถเป็นโซลูชันที่สมบูรณ์แบบสำหรับความต้องการของคุณ
โพสต์นี้จะให้ข้อมูลเชิงลึกของ NestJS รวมถึงประสบการณ์ตรง
NestJS คืออะไร?
เนสเจ เป็นเฟรมเวิร์กโหนดแบบก้าวหน้าที่เป็นโอเพ่นซอร์ส ขยายได้ และปรับเปลี่ยนได้ .js กรอบงานสำหรับการสร้าง การมีส่วนร่วม และความท้าทายของระบบแบ็กเอนด์ ตอนนี้เป็นโหนดที่มีอัตราการเติบโตเร็วที่สุด
กรอบงาน TypeScript สำหรับ js NestJS ใช้เพื่อสร้างแอปพลิเคชันที่สามารถปรับขนาดได้ ทดสอบได้ และเชื่อมต่อแบบหลวมๆ
เพิ่มความสามารถในการปรับขนาดให้กับ Node เซิร์ฟเวอร์ Js ถูกนำไปยังระดับใหม่ทั้งหมด PostgreSQL, MongoDB และ MySQL เป็นฐานข้อมูลที่ได้รับการสนับสนุน
NestJS สามารถขยายได้เพราะสามารถใช้กับไลบรารีอื่นได้ ยืดหยุ่นได้เนื่องจากระบบนิเวศที่ปรับตัวได้อย่างเต็มที่ และก้าวหน้าเพราะรองรับคุณสมบัติ JavaScript และหลักการออกแบบ
โดยได้รับอิทธิพลจาก Angular, React และ Vue เป็นหลัก และมาพร้อมกับการฉีดพึ่งพาในตัว
คุณสมบัติ
- ใช้งานง่าย เรียนรู้ และเชี่ยวชาญ
- ได้ฟรีและ โอเพนซอร์ส (ใบอนุญาต MIT)
- Command Line Interface (CLI) อันทรงพลังสำหรับประสิทธิภาพที่เพิ่มขึ้นและความเรียบง่ายในการพัฒนา
- โปรแกรมทดสอบหน่วยที่ใช้งานง่าย
- ใช้ TypeScript ซึ่งเป็นภาษาที่พิมพ์อย่างแน่นหนาซึ่งเป็น superset ของ JavaScript
- การพัฒนาและบำรุงรักษา Codebase ที่ใช้งานอยู่
- รองรับโมดูลเฉพาะรังหลายร้อยโมดูลที่ทำให้ง่ายต่อการเชื่อมต่อกับเทคโนโลยีและแนวคิดยอดนิยม เช่น TypeORM, Mongoose, GraphQL, การบันทึก, การตรวจสอบความถูกต้อง, การแคช, WebSockets และอื่นๆ
การสร้างบล็อคของ NestJS คืออะไร?
ส่วนประกอบอาคารของแอปพลิเคชัน Nest มีการระบุไว้ด้านล่าง มีอีกหลายอย่าง แต่สามสิ่งนี้สำคัญที่สุด เรามาดูกันอย่างรวดเร็ว
1 ตัวควบคุม
ผู้ควบคุมมีหน้าที่ในการประมวลผลคำขอที่เข้ามาและตอบสนองต่อลูกค้า รับคำขอ HTTP โดยเฉพาะ และระบบการกำหนดเส้นทางจะกำหนดว่าตัวควบคุมใดได้รับคำขอใด
จากนั้นจึงร่างคำตอบที่เหมาะสมเพื่อส่งออก ด้วยความช่วยเหลือของคลาสและมัณฑนากร ตัวรวบรวมที่เรียบง่ายถูกสร้างขึ้นและคอนโทรลเลอร์แต่ละตัวมีชุดเส้นทางของตัวเองสำหรับการทำงานที่หลากหลาย
2. ผู้ให้บริการ
ผู้ให้บริการเป็นแนวคิดหลักใน Nest คลาสหลักของ Nest จำนวนมาก เช่น บริการ ที่เก็บ โรงงาน ผู้ช่วย และอื่นๆ สามารถจัดการได้ในฐานะผู้ให้บริการ
แนวคิดพื้นฐานของผู้ให้บริการคือสามารถฉีดเป็นการพึ่งพาได้ นี่หมายความว่าอ็อบเจ็กต์สามารถสร้างความสัมพันธ์ที่หลากหลายระหว่างกัน และบทบาทของ "การเดินสาย" อินสแตนซ์ของอ็อบเจ็กต์สามารถเอาท์ซอร์สไปยังระบบรันไทม์ของ Nest ได้เป็นส่วนใหญ่
3. โมดูล
โมดูลคือคลาสที่มีมัณฑนากร @Module() ที่จัดระเบียบส่วนประกอบของโครงสร้างของแอปพลิเคชัน แต่ละแอปพลิเคชันมีโมดูลรากที่ใช้สร้างกราฟแอปพลิเคชัน ซึ่งจะแก้ไขการพึ่งพาและการโต้ตอบระหว่างผู้ให้บริการและโมดูลเพิ่มเติม
มัณฑนากรนี้ให้ข้อมูลเมตาแก่ Nest.js เพื่อระบุว่าจะใช้ส่วนประกอบ ตัวควบคุม หรือทรัพยากรอื่นใดในโค้ดของแอปพลิเคชันและรวมเข้าด้วยกันเป็นชุดเดียว
แต่ละโมดูลมีชุดของความสามารถที่เชื่อมต่อกันไม่ทางใดก็ทางหนึ่ง
เริ่มต้นใช้งาน NestJS
1 การติดตั้ง
มาติดตั้ง NestJS และสร้างโปรเจ็กต์โดยทำตามขั้นตอนเหล่านี้:
โครงสร้างไดเร็กทอรีต่อไปนี้จะถูกสร้างขึ้นจากสิ่งนี้:
2 ตัวควบคุม
หน่วยการสร้างของ Nest คือตัวควบคุม เหล่านี้เป็นตำแหน่งที่จะจัดการกับคำขอขาเข้า คุณสามารถระบุเส้นทางของเส้นทางได้โดยใช้ตัวแก้ไขเมธอด HTTP (รับ โพสต์ วาง ลบ และอื่นๆ) ตามที่แสดงในโค้ดด้านล่าง
Nestjs ใช้วิธีมัณฑนากรและส่วนใหญ่พัฒนาใน typescript แม้ว่าจะรองรับ JavaScript ก็ตาม คุณยังสามารถใช้ตัวตรวจสอบคลาสเพื่อตรวจสอบเนื้อหาของคำขอ
ฉันแค่จะสร้างอินสแตนซ์เซิร์ฟเวอร์ Nestjs และเพิ่ม ValidationPipe ทั่วโลก ท่อเป็นเพียงวิธีการที่ดำเนินการก่อนตัวควบคุม สามารถใช้ท่อที่ระดับเมธอด/อาร์กิวเมนต์ได้โดยใช้ตัวตกแต่ง @UsePipes
3. ผู้ให้บริการ
ผู้ให้บริการเป็นอีกหนึ่งองค์ประกอบที่สำคัญของ Nestjs จนถึงตอนนี้ ฉันกำลังจัดเก็บข้อมูลในตัวแปรชั่วคราว นั่นคือเหตุผลที่งานง่าย ๆ ดังกล่าวสามารถทำได้โดยใช้ตัวจัดการคอนโทรลเลอร์
อย่างไรก็ตาม สำหรับตรรกะที่ใหญ่กว่าและซับซ้อนกว่า การแยกโค้ดและการใช้ซ้ำอาจเป็นเรื่องยาก นี่คือเวลาที่ซัพพลายเออร์เข้ามา คุณสามารถประกาศ/สร้างผู้ให้บริการที่ด้านบนของชั้นเรียนโดยใช้มัณฑนากร @Injectable จากนั้นเมื่อใช้ผู้ให้บริการ คุณสามารถดำเนินการแทรกการพึ่งพา บันทึก และงานอื่นๆ ได้
4. โมดูล
โมดูล Nestjs ไม่ใช่แบบโกลบอล พวกเขามีความลึกแทน
อย่างไรก็ตาม สามารถแชร์กับโมดูลอื่นๆ ได้เช่นกัน แม้ว่าจะมี Global Modules เหมือนกับ Angular แต่ก็แนะนำให้เก็บ Services/Controllers ไว้ในโมดูลที่มักใช้ใน Nestjs
NestCLI ใช้ในการผลิตโมดูลเป็นส่วนใหญ่ และผู้ให้บริการ/ตัวควบคุมที่สร้างขึ้นในบริบทของโมดูลนั้นจะถูกเพิ่มโดย CLI โดยอัตโนมัติ สิ่งเหล่านี้เรียกว่าโมดูลคุณลักษณะ
5. ตัวกรองข้อยกเว้น
ตัวกรองข้อยกเว้นเป็นตัวจัดการข้อผิดพลาดที่เรียกใช้เมื่อตัวควบคุมส่งข้อยกเว้น จะจัดการปัญหาโดยอัตโนมัติและส่งข้อความแสดงข้อผิดพลาดที่เหมาะสมและเป็นมิตรกับผู้ใช้
ข้อยกเว้นที่สืบทอดมาจาก HttpException จำนวนมากมีให้โดยแพ็คเกจ @nestjs/common รวมถึง NotFoundException, BadRequestException, NotAcceptableException, UnauthorizedException และอื่นๆ อีกมากมาย คุณยังสามารถออกแบบ ExceptionFilter ของคุณเองได้อีกด้วย
6. มิดเดิลแวร์
ฟังก์ชันที่ถูกเรียกใช้ก่อนตัวจัดการเส้นทางจะเรียกว่ามิดเดิลแวร์ ออบเจ็กต์คำขอและการตอบสนอง ตลอดจนฟังก์ชันมิดเดิลแวร์ next() ในรอบการตอบสนองคำขอของแอปพลิเคชัน สามารถเข้าถึงได้จากฟังก์ชันมิดเดิลแวร์
ตัวแปรที่เรียกว่า next มักใช้เพื่อระบุฟังก์ชันมิดเดิลแวร์ถัดไป มิดเดิลแวร์ Custom Nest สามารถนำมาใช้ในวิธีการหรือคลาสโดยใช้มัณฑนากร @Injectable()
7. ยาม
ยามมีหน้าที่เพียงสิ่งเดียวเท่านั้น เป็นความรับผิดชอบของพวกเขาในการประเมินว่าคำขอจะได้รับการประมวลผลโดยผู้ควบคุมตามสถานการณ์เฉพาะหรือไม่ (โดยเฉพาะ ตรรกะที่ผู้ใช้กำหนด)
มีประโยชน์สำหรับการรับรองความถูกต้อง/การให้สิทธิ์ และเป็นวิธีที่แนะนำใน Nestjs
แม้ว่าการพิสูจน์ตัวตน/การอนุญาต ฯลฯ สามารถทำได้โดยใช้มิดเดิลแวร์ แต่ก็ไม่ได้ทำในเซิร์ฟเวอร์ด่วนหรือ HTTP อื่น ๆ เนื่องจากไม่มีบริบทที่รัดกุมที่เกี่ยวข้องและไม่มีเหตุผลที่จะรู้ว่าจะใช้วิธีการใดในการประมวลผลคำขอ
ข้อดี
- กรอบงานต้องอาศัยคำอธิบายประกอบอย่างมาก ซึ่งใช้เพื่อสร้างทุกอย่างตั้งแต่ปลายทางไปจนถึงเอกสารประกอบของ Swagger จุดปลายเป็นพื้นฐานและเป็นระเบียบเรียบร้อย และคำอธิบายประกอบทำให้การพัฒนาโดยทั่วไปง่ายขึ้น
- การทำให้โมดูลเอนกประสงค์จากภายนอกเป็นเรื่องง่ายและนำโค้ดกลับมาใช้ใหม่ในหลายโครงการ เนื่องจาก Nest.js เป็นเฟรมเวิร์กแบบโมดูล
- โครงสร้างโฟลเดอร์ของ Nest.js ได้รับอิทธิพลอย่างมากจาก Angular เมื่อออกแบบบริการ Nest จะช่วยให้มีการหยุดทำงานน้อยที่สุด
- คอมโพเนนต์มีไดเร็กทอรีของตนเอง โดยมีรูทที่มีโมดูลแอปพลิเคชันและไฟล์หลัก เนื่องจากความเรียบง่ายของโครงสร้าง จึงสามารถให้ความสำคัญกับการออกแบบจุดปลายและลูกค้ามากกว่าโครงสร้างของแอปพลิเคชัน
- Nest เช่น Angular มีเครื่องมือบรรทัดคำสั่งที่ดี Nestjs/cli ซึ่งพร้อมใช้งานผ่าน Node Package Manager
ข้อเสีย
- Nest มีข้อได้เปรียบในแง่ของการใช้ TypeScript และการรวมเชิงมุม แต่ขาดการสนับสนุนทางการเงินจากองค์กรขนาดใหญ่
- การไม่มีเอกสารเป็นภัยคุกคามต่อผู้ใช้ Nest มากที่สุด แม้ว่ากรอบงานจะมีปฏิสัมพันธ์ที่ดีเยี่ยมกับกรอบงานอื่นๆ แต่เอกสารประกอบก็เบาบางและไม่สามารถแก้ไขปัญหาใดๆ ที่อาจเกิดขึ้นได้
- Nest มีข้อได้เปรียบในแง่ของการใช้ TypeScript และ Angular
สรุป
NestJS ให้นักพัฒนาที่มีขาขึ้น เพื่อเริ่มต้นการพัฒนา สิ่งที่คุณต้องทำคือ สร้างแอพใหม่ และคุณก็พร้อมที่จะไป เฟรมเวิร์กนี้ช่วยเพิ่มประสิทธิภาพในทันที ขณะเดียวกันก็ช่วยเหลือคุณในการทำขั้นตอนเพิ่มเติมด้วยการสร้างสถาปัตยกรรมแอพที่เหมาะสม
ใช้วิธีการและเทคโนโลยีที่ทันสมัยในการผลิตแอพพลิเคชั่นที่สามารถจัดการได้และใช้งานได้ยาวนาน สามารถใช้เชื่อมต่อกับ GraphQL, WebSockets และสร้างไมโครเซอร์วิส
เขียนความเห็น