เมื่อสัปดาห์ที่แล้วฉันได้ติดต่อกับกรอบการแล่นเรือใบโดยการสร้างระบบ CMS และเรียนรู้แนวคิดบางอย่างของ ORM สัปดาห์นี้เราเริ่มที่จะลึกเข้าไปในการโต้ตอบข้อมูลพื้นหลังและพบว่าโครงสร้างข้อมูลของเฟรมเวิร์กยี่สิบได้รับการออกแบบบนใบเรือ (เช่นโหนดและหมวดหมู่) ฉันต้องบอกว่าอาวุโสของฉันน่าทึ่งมาก แต่ความซับซ้อนก็เพิ่มขึ้นเช่นกัน งานของฉันในโครงการ DTree คือการใช้เรือใบเพื่อโต้ตอบกับกระบวนการทางธุรกิจและฐานข้อมูล ครั้งต่อไปในสัปดาห์นี้คือการใช้ใบเรือ
รู้เบื้องต้นเกี่ยวกับการแล่นเรือใบ
ใบเรือเป็นเหมือนทับทิมบนรางและเป็นกรอบที่ทำให้การพัฒนาเว็บง่ายขึ้น เท่าที่ฉันรู้ในช่วงเวลานี้มันสืบทอด APIs ของ Express & Socket.io อย่างสมบูรณ์และใช้ Waterline (ORM) สำหรับการโต้ตอบฐานข้อมูลแบบครบวงจรเพื่อให้การดำเนินการ CRUD สามารถทำได้ในสภาพแวดล้อมฐานข้อมูลที่แตกต่างกันโดยไม่ต้องปรับเปลี่ยนรหัสโดยตรง ซิงโครไนซ์ข้อมูลด้านหน้าและด้านหลังจบลงด้วยกรอบกระดูกสันหลังและใช้นโยบายมิดเดิลแวร์เพื่อตรวจสอบการโต้ตอบของพิมพ์เขียวของตัวเองอย่างปลอดภัย มันสามารถโต้ตอบผ่าน RESTFOLL API โดยไม่มีรหัสบรรทัดเดียวในด้านหน้าและด้านหลัง
Socket.io & Express
ส่วนหน้าได้เรียนรู้สองสิ่งนี้ในเวลาหนึ่งคือการสื่อสารของ WebSock และอีกสิ่งหนึ่งคือการประมวลผลคำขอ HTTP ใบเรือไม่ได้รับการออกแบบใหม่ แต่ใช้เครื่องมือทั้งสองนี้เพื่อจัดการกับฟังก์ชั่นเหล่านี้โดยตรงลดค่าใช้จ่ายในการเรียนรู้มาก Socket.io ทริกเกอร์ข้อความรับฟังข้อความและดำเนินการตามที่เหมาะสมทั้งบนเซิร์ฟเวอร์และไคลเอนต์
การคัดลอกรหัสมีดังนี้:
-
// ฝั่งเซิร์ฟเวอร์
io.sockets.on ("การเชื่อมต่อ" ฟังก์ชั่น (ถุงเท้า) {
Sock.emit ("NormalMessage", {a: "C"});
-
// บริการลูกค้า
Sock.on ("NormalMessage", ฟังก์ชั่น (JSON) {... });
-
ฟังก์ชั่นของ Express อยู่ในการดำเนินการเส้นทางเช่น app.get ('/login', ฟังก์ชั่น (req, res) {});
พิมพ์เขียวและกระดูกสันหลัง
ในการพัฒนาเว็บ CRUD เป็นประเภทของการดำเนินการที่คล้ายกันเช่น GET/POST ใน HTTP และเลือก/แทรกในฐานข้อมูล พิมพ์เขียว API ของใบเรือและกรอบกระดูกสันหลังของ JS ทั้งสองใช้ฟังก์ชั่นแบบครบวงจร (เช่น Findone) เพื่อให้ตรรกะภายในได้รับการจัดตั้งขึ้นแล้วเมื่อโปรแกรมสร้างแบบจำลองและคอนโทรลเลอร์ที่เกี่ยวข้อง ตัวอย่างเช่นโมเดลผู้ใช้ที่ใช้กันทั่วไปได้สร้างคอนโทรลเลอร์ในใบเรือเพื่อส่งผ่านและจัดเก็บข้อมูลของผู้ใช้ สิ่งที่เราต้องให้ความสนใจคือข้อกำหนดและกระบวนการทางธุรกิจของชื่อไฟล์ มันก็โอเคถ้าคุณต้องการแทนที่ (โอเวอร์โหลด) วิธีดั้งเดิม หลังจากที่เราตั้งค่าการกระทำและคอนโทรลเลอร์ในเส้นทางในโฟลเดอร์ config เราสามารถเพิ่มฟังก์ชั่นที่เราต้องการในคอนโทรลเลอร์ที่เกี่ยวข้อง
สายน้ำ
แพ็คเกจ API ของ Sails ขึ้นอยู่กับการโต้ตอบกับฐานข้อมูลเช่น create (), findone (), update () ฯลฯ ตามที่กล่าวไว้ก่อนหน้านี้เราไม่จำเป็นต้องกังวลเกี่ยวกับเครื่องมือฐานข้อมูลที่แตกต่างกันเพื่อเรียกวิธีการเหล่านี้โดยตรงอย่างสม่ำเสมอ ตัวอย่างเช่นเมื่อป้อนข้อมูล
การคัดลอกรหัสมีดังนี้:
-
users.create ({ชื่อผู้ใช้: ชื่อผู้ใช้รหัสผ่าน: รหัสผ่าน}). exec (ฟังก์ชั่น (ข้อผิดพลาด, ผู้ใช้) {
ถ้า (ข้อผิดพลาด) {
Res.Send (500, {ข้อผิดพลาด: "ข้อผิดพลาด DB"});
} อื่น {
req.session.user = ผู้ใช้;
Res.Send (ผู้ใช้);
-
-
ระบบเริ่มต้นคือการบันทึกข้อมูลในระบบไฟล์โลคัล หากเราต้องการเลือก MySQL หรือ MongoDB เพียงแก้ไขในไฟล์กำหนดค่าและเลือกอะแดปเตอร์ฐานข้อมูลเพื่อโต้ตอบกับข้อมูล
นโยบาย
นำไปใช้กับมิดเดิลแวร์บนคอนโทรลเลอร์ทำงานก่อนที่จะมีการร้องขอ HTTP ตัวอย่างเช่นการควบคุมตัวตนสามารถทำได้เช่นคุณสามารถดำเนินการต่อไปได้หากคุณเข้าสู่ระบบ
การคัดลอกรหัสมีดังนี้:
-
if (req.session.user) {
var action = req.options.action;
if (action == "create") {
req.body.userid = req.session.user.id;
req.body.username = req.session.user.username;
-
ต่อไป();
}อื่น{
Res.Send ("คุณต้องเข้าสู่ระบบ", 403);
-
-
ต่อไป
การแล่นเรือเริ่มประสบความสำเร็จ แต่ก็ยังต้องทำงานหนักขึ้นในเรื่องนี้ โดยการวางรากฐานที่มั่นคงเท่านั้นที่เราสามารถบรรลุความต้องการเฉพาะ ดังนั้นเราจำเป็นต้องเรียนรู้ต่อไปค้นหากิจวัตรเพิ่มเติมเพื่อเรียนรู้การแล่นเรือในเชิงลึกและยังรู้ถึงข้อ จำกัด ของกรอบนี้