Express, Koa, Meteor, Sails.js: Four Frameworks Of The Apocalypse

เผยแพร่แล้ว: 2022-03-11

JavaScript ได้กลายเป็นหนึ่งในภาษาที่ได้รับความนิยมมากที่สุดในช่วงไม่กี่ปีที่ผ่านมา เนื่องจากความต้องการเว็บแอปพลิเคชันจำนวนมาก ในขณะที่เขียนโค้ดสำหรับเบราว์เซอร์หลายตัว JavaScript เกือบจะเป็นทางเลือกเดียวสำหรับนักพัฒนาส่วนหน้า อาจมีคนโต้แย้งว่ามี CoffeeScript, TypeScript หรือ Dart เป็นทางเลือก อย่างไรก็ตาม ความจริงก็คือว่า CoffeeScript ส่วนใหญ่ถูกมองว่าเป็นน้ำตาลประโยคที่สุดท้ายเดือดลงไปที่ JavaScript TypeScript เป็นเพียง superset ของ JavaScript ที่มีคุณลักษณะภาษาเชิงวัตถุหลายอย่าง เช่น การพิมพ์สแตติก คลาส และอินเทอร์เฟซที่เป็นตัวเลือก และยังอยู่ในช่วงเริ่มต้น Dart เป็นภาษาเชิงวัตถุซึ่งมีรูปแบบคล้าย C แต่ยังคงคอมไพล์เป็น JavaScript สำหรับเบราว์เซอร์กระแสหลัก

ด้วยการถือกำเนิดและการเติบโตอย่างรวดเร็วของ Node.js ทำให้ JavaScript ไม่ได้ถูกจำกัดอยู่ที่การพัฒนา front-end อีกต่อไป และการพัฒนาแบ็คเอนด์ก็ไม่ใช่วิทยาศาสตร์จรวดสำหรับโค้ดเดอร์ส่วนหน้าอีกต่อไป ผู้คนมักคิดว่า JavaScript เป็นสัญลักษณ์แสดงหัวข้อย่อยสีเงินที่เหมาะกับทุกสถานการณ์: ฟรอนต์เอนด์ เว็บเซิร์ฟเวอร์ แอปพลิเคชันเดสก์ท็อป ระบบฝังตัว ฐานข้อมูล … รายการยาวขึ้นเรื่อยๆ อันที่จริง เนื่องจากจาวาสคริปต์มีผู้ชมจำนวนมาก Node.js+MongoDB+AngularJS/React ทำให้นักพัฒนาเว็บเต็มสแต็กจำนวนมาก อย่างไรก็ตาม Node.js ได้รับการออกแบบมาให้มีน้ำหนักเบาและมีฟังก์ชันพื้นฐานเท่านั้นในฐานะเว็บเซิร์ฟเวอร์เพื่อเพิ่มความเร็วในการพัฒนาเว็บแอปพลิเคชัน หนึ่งในเฟรมเวิร์กที่ดีที่พร้อมใช้งานเป็นแพ็คเกจ npm จะเป็นตัวเลือกที่ดีกว่าในโลกแห่งความเป็นจริง

ในโพสต์นี้ เราจะอธิบายเกี่ยวกับเฟรมเวิร์ก Node.js ที่เป็นที่รู้จักและผ่านการทดสอบตามเวลาซึ่งทำให้นักพัฒนาไม่ต้องสร้างวงล้อใหม่ซ้ำแล้วซ้ำอีก เพื่อให้เจาะจงยิ่งขึ้น ในบทความนี้เราจะมาดู Express, Koa, Meteor และ Sails.js แทนที่จะพยายามคิดว่าแต่ละเฟรมเวิร์กเหล่านี้ซ้อนกันอย่างไร เราจะเห็นประเด็นสำคัญที่แต่ละเฟรมเวิร์กเหล่านี้มีความเป็นเลิศและความเกี่ยวข้องกับความต้องการของโครงการต่างๆ อย่างไร

Express: A Minimalist Web Framework

มันไปโดยไม่บอกว่า Express เป็นข้อตกลงที่ใหญ่ที่สุดสำหรับธุรกิจ Node.js ผู้เล่น Node.js ทุกคนเคยได้ยินเกี่ยวกับมันและกำลังใช้งานโดยมีหรือไม่มีการสังเกต ขณะนี้อยู่ในรุ่นที่ 4 และมีเฟรมเวิร์ก Node.js ค่อนข้างน้อยที่สร้างขึ้นตามหรือได้รับแรงบันดาลใจจากแนวคิด

ผลงาน

นักพัฒนาส่วนใหญ่ชื่นชอบ Node.js ในเรื่องความเร็วที่ดิบ และเมื่อพูดถึงการเลือกเฟรมเวิร์ก ผู้ชอบความสมบูรณ์แบบอาจดูถูกอันตรายด้านประสิทธิภาพการทำงานใดๆ Express ให้เลเยอร์บางๆ ที่ด้านบนของ Node.js พร้อมคุณสมบัติเว็บแอปพลิเคชัน เช่น การกำหนดเส้นทางพื้นฐาน มิดเดิลแวร์ เอ็นจิ้นเทมเพลต และการให้บริการไฟล์แบบสแตติก ดังนั้นประสิทธิภาพ I/O ที่รุนแรงของ Node.js จะไม่ถูกบุกรุก

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

เครื่องกำเนิดไฟฟ้า

แม้ว่ากรอบงานจะไม่ได้รับความเห็น แต่ก็มีตัวสร้างที่สร้างโครงสร้างโฟลเดอร์โครงการเฉพาะ หลังจากติดตั้งแพ็คเกจ Express-generator npm และสร้างโครงร่างแอปพลิเคชันด้วยคำสั่งตัวสร้าง โฟลเดอร์แอปพลิเคชันที่มีลำดับชั้นที่ชัดเจนจะถูกสร้างขึ้นเพื่อช่วยคุณจัดระเบียบรูปภาพ JavaScript สแตติกส่วนหน้า ไฟล์สไตล์ชีต และไฟล์เทมเพลต HTML

 npm install express-generator -g express helloapp
 create : helloapp create : helloapp/package.json create : helloapp/app.js create : helloapp/public create : helloapp/public/images create : helloapp/routes create : helloapp/routes/index.js create : helloapp/routes/users.js create : helloapp/public/stylesheets create : helloapp/public/stylesheets/style.css create : helloapp/views create : helloapp/views/index.jade create : helloapp/views/layout.jade create : helloapp/views/error.jade create : helloapp/bin create : helloapp/bin/www install dependencies: $ cd helloapp && npm install run the app: $ DEBUG=helloapp:* npm start create : helloapp/public/javascripts

มิดเดิลแวร์

โดยพื้นฐานแล้วมิดเดิลแวร์เป็นเพียงฟังก์ชันที่สามารถเข้าถึงทั้งออบเจกต์คำขอและการตอบสนองได้อย่างเต็มที่

ขอการจัดการ stack

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

 var app = express(); app.use(cookieParser()); app.use(bodyParser()); app.use(logger()); app.use(authentication()); app.get('/', function (req, res) { // ... }); app.listen(3000);

แอปพลิเคชัน Express คือ Node.js ที่มีโฮสต์ของฟังก์ชันมิดเดิลแวร์ ไม่ว่าคุณจะต้องการปรับแต่งมิดเดิลแวร์ของคุณเองหรือใช้ประโยชน์จากมิดเดิลแวร์ในตัวของเฟรมเวิร์ก Express ทำให้กระบวนการนี้เป็นธรรมชาติและใช้งานง่าย

เครื่องยนต์แม่แบบ

เครื่องมือเทมเพลตช่วยให้นักพัฒนาสามารถฝังตัวแปรแบ็กเอนด์ลงในไฟล์ HTML และเมื่อได้รับการร้องขอ ไฟล์เทมเพลตจะแสดงผลเป็นรูปแบบ HTML ธรรมดาพร้อมตัวแปรที่สอดแทรกค่าจริงของพวกมัน โดยค่าเริ่มต้น Express-generator จะใช้เทมเพลตเอ็นจิ้น Pug (แต่เดิมรู้จักกันในชื่อ Jade) แต่ตัวเลือกอื่นๆ เช่น Mustache และ EJS ยังทำงานกับ Express ได้อย่างราบรื่น

การรวมฐานข้อมูล

เนื่องจากเป็นเฟรมเวิร์กขั้นต่ำ Express ไม่ได้พิจารณาการรวมฐานข้อมูลเป็นแง่มุมที่จำเป็นภายในแพ็คเกจ ดังนั้นจึงไม่มีการใช้งานฐานข้อมูลเฉพาะใดๆ ในขณะที่ใช้เทคโนโลยีการจัดเก็บข้อมูลโดยเฉพาะ ไม่ว่าจะเป็น MySQL, MongoDB, PostgreSQL, Redis, ElasticSearch หรืออย่างอื่น เป็นเพียงเรื่องของการติดตั้งแพ็คเกจ npm เฉพาะเป็นไดรเวอร์ฐานข้อมูล ไดรเวอร์ฐานข้อมูลของบริษัทอื่นเหล่านี้ไม่สอดคล้องกับไวยากรณ์ที่เป็นหนึ่งเดียวเมื่อทำตามคำแนะนำ CRUD ซึ่งทำให้การสลับฐานข้อมูลเป็นเรื่องยุ่งยากและมักเกิดข้อผิดพลาดได้ง่าย

Koa: การใช้คุณสมบัติ JavaScript รุ่นต่อไป

Koa ได้รับการพัฒนาโดยทีมงานที่อยู่เบื้องหลัง Express และเป้าหมายของมันคือการลดขนาด Express ที่เรียบง่ายที่สุด โดยไม่รวมมิดเดิลแวร์ใดๆ ไว้ในแกนกลางของมัน นอกเหนือจากการเป็นมิดเดิลแวร์แล้ว Koa ยังดูคล้ายกับ Express มาก น้ำหนักเบา และไม่มีความคิดเห็น อย่างไรก็ตาม สิ่งที่ทำให้ Koa โดดเด่นอย่างแท้จริงคือวิธีการยกเลิกการโทรกลับโดยสมบูรณ์โดยใช้คุณสมบัติ ES6 Generator

การควบคุมที่สง่างาม

Javascript เป็นภาษาการเขียนโปรแกรมแบบอะซิงโครนัส และด้วยสัญชาตญาณของภาษานั้นเองและกลไกที่ขับเคลื่อนด้วยเหตุการณ์แบบเธรดเดียวของ Node.js การเรียกกลับมีอยู่ทั่วทุกแห่ง ดังนั้นจึงเป็นการเรียกกลับที่ฉาวโฉ่

วิธีหนึ่งในการทำให้การซ้อนการโทรกลับราบรื่นขึ้นคือการใช้ Async.js Async.js มีเทคนิคในการทำแผนที่, ขนาน, ทำให้เป็นอนุกรมหรือทำซ้ำหลาย ๆ ฟังก์ชันโดยไม่ต้องฝังฟังก์ชันเข้าด้วยกันแล้วส่งผ่านโฟลว์การควบคุมด้วยฟังก์ชันเรียกกลับ การเรียกกลับหนึ่งครั้งและฟังก์ชันการจัดการข้อผิดพลาดหนึ่งฟังก์ชันก็เพียงพอแล้วสำหรับฟังก์ชันจำนวนมากที่จัดกลุ่มไว้ด้วยกัน โดยวิธีการ Async.js ทว่า Async.js ไม่สามารถล้างการเรียกกลับทั้งหมดได้ เมื่อเขียนโค้ด Node.js ด้วย Async.js การเยื้องของโค้ดยังคงมีแนวโน้มที่จะเลื่อนไปทางขวา แต่ไม่ลึกเท่า

หลบหนีจากโทรกลับนรก

อีกวิธีหนึ่งที่สะอาดกว่าคือการใช้ Promises ที่สามารถทำได้ ห้องสมุด Promise ของบุคคลที่สามบางแห่งที่มีชื่อเสียงคือ bluebird และ q ใน JavaScript รุ่นใหม่ล่าสุด ES6 Promise ถูกนำมาใช้เป็นมาตรฐาน เรื่องสั้นโดยย่อ Promise รับประกันว่าฟังก์ชันต่างๆ จะได้รับการดำเนินการและส่งคืนตามลำดับโดยการเชื่อมต่อบล็อกการใช้งาน/ฟังก์ชันต่างๆ กับฟังก์ชัน Promise "then" จำนวนมาก คุณ "แก้ไข" ที่ส่วนท้ายของบล็อก/ฟังก์ชันการใช้งานแต่ละส่วน เพื่อให้ฟังก์ชัน "จากนั้น" ถัดไปทำงาน หรือคุณ "ปฏิเสธ" การใช้งานต่อไปนี้ เพื่อให้โฟลว์การควบคุมข้ามไปทางขวาเพื่อจัดการกับข้อผิดพลาด ด้วยวิธีนี้ คุณจะรวมฟังก์ชันการจัดการข้อผิดพลาดทั้งหมดไว้ในที่เดียวและกำจัดการเรียกกลับอย่างทั่วถึง

ตอนนี้ ES6 นำตัวเปลี่ยนเกมมาสู่โต๊ะ — ES6 Generator แนวคิดนี้เป็นสิ่งใหม่สำหรับ JavaScript แต่ก็ไม่ใช่เรื่องใหม่ในโลกของการเขียนโปรแกรมเลย ES6 Generator เป็นเหมือนการหยุดชะงักใน C แทนที่จะเรียกใช้โค้ดจากบนลงล่าง ES6 Generator แนะนำวิธีการเรียกใช้ -> หยุดและเรียกใช้อย่างอื่น -> กลับมาเพื่อทำสิ่งที่เหลือให้เสร็จ

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

 var app = koa(); function* responseTimeLogger(next){ var start = new Date; yield next; var ms = new Date - start; console.log(this.method + ' ' + this.url + ': ' + ms); } app.use(responseTimeLogger); // ... app.listen(3000);

เราไม่สามารถข้ามไปสู่ข้อสรุปที่ยืนยันว่าเทคนิคล้ำสมัยนี้เหนือกว่าโซลูชันของโรงเรียนเก่า เช่น Async.js, Promise หรือตัวปล่อยเหตุการณ์ แต่สิ่งหนึ่งที่แน่นอนว่าแนวคิดใหม่นี้ต้องใช้เวลาพอสมควรในการทำความคุ้นเคย ด้วยลำดับโฟลว์การควบคุมที่ไม่ธรรมดา อาจทำให้การดีบักโค้ดยากขึ้น

Meteor: Framework สำหรับเว็บ มือถือ และเดสก์ท็อป

Meteor เป็นเฟรมเวิร์ก JavaScript แบบ all-in-one ความแตกต่างจากปรัชญาการทำให้เข้าใจง่ายของ Express และ Koa นั้นไปอีกขั้นด้วยการกำหนดตัวเองเป็นเฟรมเวิร์กฟูลสแตก แพ็คเกจเต็มรูปแบบที่ครอบคลุมเซิร์ฟเวอร์ มือถือ เดสก์ท็อปและเว็บแอป

แพ็คเกจเดียวสำหรับทั้งหมด

หากคุณมองอย่างใกล้ชิดภายใต้ประทุน คุณจะสังเกตเห็นว่า Meteor เป็น Node.js+Blaze/AngularJS/React+Cordova+MongoDB จริงๆ Node.js และ MongoDB รับผิดชอบตรรกะทางธุรกิจฝั่งเซิร์ฟเวอร์และการจัดเก็บข้อมูลตามลำดับ Blaze, AngularJS หรือ React ตัวใดตัวหนึ่งดูแล UI ส่วนหน้า และคอร์โดวาซึ่งเป็นโซลูชัน HTML ที่มีชื่อเสียงที่สุดสำหรับแอปไฮบริดบนมือถือ เชื่อมโยงหน้าเว็บกับมุมมองบนมือถือ

การซิงโครไนซ์ข้อมูล

กระบวนการหลักสำหรับแบ็กเอนด์และฟรอนต์เอนด์ในการแชร์ข้อมูลมีดังนี้:

  • ลูกค้าร้องขอข้อมูลหรือมุมมอง HTML บางอย่าง
  • เซิร์ฟเวอร์ดึงข้อมูลจากฐานข้อมูล ผสมผสานข้อมูลกับมุมมอง HTML โดยใช้เอ็นจิ้นการสร้างเทมเพลตและส่งกลับไปยังส่วนหน้า
  • ลูกค้าแสดงและแสดงข้อมูล/มุมมองในลักษณะที่เป็นมิตรกับผู้ใช้

เว็บแอปพลิเคชั่นหน้าเดียวที่ทันสมัยปรับแต่งกระบวนการข้างต้นเล็กน้อย ตัวอย่างเช่น ใช้ AngularJS วางเทมเพลต HTML เป็นไฟล์สแตติกร่วมกับเนื้อหาอื่นๆ เช่น ไฟล์ JavaScript ส่วนหน้า สไตล์ชีต และรูปภาพ จากนั้น AngularJS จะกรอกข้อมูลลงในเทมเพลต HTML โดยขอข้อมูลส่วนหลังโดยใช้ Ajax RESTful API ไม่ว่าจะด้วยวิธีใด นักพัฒนาส่วนหลังมีหน้าที่รับผิดชอบอย่างเต็มที่ในการจัดการคำขอเปลี่ยนแปลงข้อมูลจากส่วนหน้าและบันทึกการเปลี่ยนแปลงในฐานข้อมูล

การซิงโครไนซ์ข้อมูลแบบสองทิศทางสำเร็จโดยอัตโนมัติ

หนึ่งในคุณสมบัติที่ทำให้ Meteor แตกต่างจากเฟรมเวิร์กอื่นๆ คือกลไกการซิงโครไนซ์ข้อมูลระหว่างเซิร์ฟเวอร์และแอปส่วนหน้า/มือถือ ใน Meteor ลูกค้าจะเก็บ Shadow Copy ของฐานข้อมูลขนาดเล็กซึ่งเป็นส่วนเล็ก ๆ ของการจำลองแบบจากฐานข้อมูลของเซิร์ฟเวอร์ ซึ่งเป็นส่วนที่ลูกค้าร้องขอก่อนหน้านี้และได้รับอนุญาตจากเซิร์ฟเวอร์ เมื่อลูกค้าต้องการเปลี่ยนแปลงข้อมูล จะใช้ API ฐานข้อมูลที่สอดคล้องกันเป็นฝั่งเซิร์ฟเวอร์เพื่อดำเนินการคำสั่ง CRUD จากนั้นการเปลี่ยนแปลงข้อมูลจะถูกส่งไปยังเซิร์ฟเวอร์โดยอัตโนมัติและบันทึกไว้ในฐานข้อมูลจริง เมื่อใดก็ตามที่เซิร์ฟเวอร์ตรวจพบการแก้ไขข้อมูลใด ๆ เซิร์ฟเวอร์จะส่งข้อมูลที่อัปเดตไปยังไคลเอนต์เฉพาะที่สมัครรับข้อมูลเหล่านั้น การซิงโครไนซ์ข้อมูลแบบสองทิศทางนี้ทำได้โดยอัตโนมัติโดยไม่ต้องมีการแทรกแซงด้วยตนเอง เพื่อสร้างเวทย์มนตร์นี้ Meteor ใช้ WebSocket เพื่อเชื่อมต่อไคลเอนต์และเซิร์ฟเวอร์ภายใต้ประทุนเพื่อให้การเปลี่ยนแปลงข้อมูลใด ๆ ที่ปลายด้านหนึ่งจะมีผลกับอีกด้านหนึ่งทันที

สร้างเครื่องมืออัตโนมัติ

Meteor ไม่เพียงแต่ดูแลเซิร์ฟเวอร์และแอปพลิเคชันเว็บแอปเท่านั้น โดยใช้เครื่องมือสร้างของ Meteor ชื่อ Isobuild ด้วยความช่วยเหลือของ Cordova ไลบรารีที่รวม HTML/JavaScript/CSS เข้ากับฟังก์ชันมือถือดั้งเดิม Meteor ทำให้การสร้างแอป iOS และ Android เป็นเรื่องง่าย แอปมือถือที่สร้างขึ้นเป็นแอปไฮบริดที่เรียกใช้ JavaScript หรือแสดงหน้า HTML ภายใน WebView วิธีแก้ปัญหานี้อาจทำให้ประสบการณ์ของผู้ใช้ลดลงเมื่อเทียบกับแอปมือถือทั่วไป แต่สำหรับหลาย ๆ คนที่สามารถจัดการได้ทั้งหมดภายใต้ฐานโค้ดเดียวกันกับเว็บแอปนั้นเป็นจุดขายที่ค่อนข้างใหญ่ และช่วยประหยัดต้นทุนการพัฒนาได้มาก

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

Sails.js: กรอบงาน MVC ที่เหนือกว่าสำหรับ Node.js

Sails.js มีความคล้ายคลึงกันมากกับ Express มันคือตัวสร้างโปรเจ็กต์ มิดเดิลแวร์ และเอ็นจิ้นการสร้างเทมเพลต อันที่จริงแล้วมันถูกสร้างขึ้นบน Express บวกกับฟังก์ชันการทำงานระดับสูงบางอย่างเพื่อเร่งการพัฒนา

MVC

Model View Controller

Sails.js ใช้รูปแบบการออกแบบ Model-View-Controller จากแกนหลัก สำหรับผู้ที่มาจาก Ruby on Rails หรือ Laravel พวกเขาจะพบว่าโครงสร้างสำหรับแอป Sails.js นั้นคุ้นเคยเกินไป โมเดลแสดงถึงโมเดลข้อมูลที่สะท้อนถึงตารางฐานข้อมูล/สคีมาการรวบรวม มุมมอง คือมุมมอง HTML ที่มีการกรอกข้อมูล ตัวควบคุมเป็นที่ที่คุณใส่ตรรกะทางธุรกิจฝั่งเซิร์ฟเวอร์ทั้งหมดและทำหน้าที่เป็นกาวระหว่างข้อมูลกับมุมมอง

การสื่อสารตามเวลาจริง

ไม่เหมือนกับคำขอ HTTP ที่ไคลเอ็นต์ต้องค้นหาข้อมูลเซิร์ฟเวอร์ทุกครั้ง หรือการเชื่อมต่อแบบโพลที่ยาวนานซึ่งทำให้เซิร์ฟเวอร์อยู่ในโหมดไม่ทำงาน Socket.io สร้างการสื่อสารตามเหตุการณ์แบบสองทิศทางระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ Sails.js รวม Socket.io และรวมเข้ากับ API ระดับนามธรรมที่สูงกว่าเพื่อให้สะดวกยิ่งขึ้น ทำให้ Sails.js เหมาะอย่างยิ่งสำหรับการสร้างแอปแชทหรือเกมที่มีผู้เล่นหลายคน

ฐานข้อมูลORM

ฐานข้อมูลORM

ระหว่างลอจิกแบ็กเอนด์และการจัดการฐานข้อมูลจริง มีเลเยอร์ ORM ตรงกลางที่เรียกว่า Waterline พูดง่ายๆ ก็คือ เครื่องมือ ORM นี้มีไวยากรณ์ที่สอดคล้องกันในการเข้าถึงฐานข้อมูลต่างๆ โดยที่นักพัฒนาไม่จำเป็นต้องกังวลเกี่ยวกับภาษาการสืบค้นฐานข้อมูลที่หลากหลาย เช่น SQL vs NoSQL, schema vs schema-less และอื่นๆ

Sails.js มีระดับการทำงานอัตโนมัติระดับกลาง โดยมุ่งเน้นไปที่ลอจิกฝั่งเซิร์ฟเวอร์และพร้อมสำหรับการผลิต และให้อัตราการพัฒนาที่เร็วกว่า Express โดยไม่ลดทอนประสิทธิภาพหรือความสามารถในการปรับขนาดในอนาคต โดยเฉพาะสำหรับผู้ชื่นชอบรูปแบบ MVC จำนวนมาก Sails.js มีเส้นโค้งการเรียนรู้ที่ค่อนข้างราบรื่น

สรุป

บทความนี้ไม่ได้จัดอันดับเฟรมเวิร์ก Node.js ที่แตกต่างกัน แต่แสดงรายการจุดที่น่าสนใจของแต่ละเฟรมเวิร์กให้โดดเด่นกว่าคนอื่นๆ เพื่อช่วยนักพัฒนา Node.js เลือกกล่องเครื่องมือที่เหมาะสมที่สุดเมื่อสร้างโปรเจ็กต์ตั้งแต่ต้นจนจบ

เฟรมเวิร์ก Node.js ที่คุณชื่นชอบสำหรับการพัฒนาเว็บคืออะไร คุณชอบกรอบงานอื่นนอกเหนือจากที่เรากล่าวถึงข้างต้นหรือไม่? แจ้งให้เราทราบในส่วนความคิดเห็นด้านล่าง

ที่เกี่ยวข้อง:
  • ทำไมฉันถึงต้องใช้ Node.js? บทช่วยสอนเป็นกรณีๆ ไป
  • การเข้ารหัส Cabin Fever: บทช่วยสอน Back-end ของ Node.js
  • การสร้าง Node.js/TypeScript REST API ส่วนที่ 1: Express.js