AdonisJS - กรอบ NodeJS ที่ดีที่สุดของปี 2017

ประมาณหกเดือนที่ผ่านมาฉันกำลังค้นหาทางเลือกสำหรับ SailsJS - MVC Framework สำหรับโหนด น่าเสียดายที่ Sails ดูดสิ่งต่างๆมากมาย - มันช้าในคำขอ POST แต่ก็ไม่รองรับฟังก์ชั่น Postgres จำนวนมากเช่นการทำธุรกรรมและมันขาดคุณสมบัติอื่น ๆ (ตัวอย่างเช่นอธิบายที่นี่) แต่สิ่งที่แย่ที่สุดคือมันไม่ได้รับการอัปเดตครั้งใหญ่ในช่วงสามปีที่ผ่านมา

ดังนั้นเราจึงเริ่มค้นหาสิ่งที่จะย้ายโครงการ nodeJS ของเราไป เราได้ลองใช้ Koa.js (แต่ขาดหลายสิ่งมากเกินไป) Meteor.js (เราไม่ต้องการโซลูชันแบบ all-in-one, API เท่านั้น), Loopback (เวทย์มนตร์มากเกินไป) และอีกไม่กี่อย่าง

จนกว่าฉันจะได้พบกับ AdonisJS ความซื่อสัตย์ถึงแม้ว่ากรอบงานจะเริ่มต้นที่ 2.5k บน GitHub แต่ก็ไม่สามารถหาได้ง่ายนัก แต่ฉันรู้สึกรักทันที ฉันจะพยายามอธิบายว่าทำไม

ข้อดี

1. การดูโครงสร้างโฟลเดอร์และลอจิกมันเกือบจะเหมือนกับ PHP-framework ที่ได้รับความนิยมอย่างมาก - Laravel และ Laravel มีโครงสร้างการคิดที่ดีซึ่งช่วยให้คุณสามารถเก็บสิ่งต่าง ๆ ได้อย่างชัดเจน ดังนั้นหากคุณเคยร่วมงานด้วยคุณจะได้เรียนรู้ Adonis อย่างรวดเร็ว

2. ORM ของมันถูกสร้างขึ้นโดยคำนึงถึงฐานข้อมูล SQL เช่น Postgres หรือ MySQL มันสร้างแบบสอบถาม SQL ที่มีประสิทธิภาพและขึ้นอยู่กับความคิดบันทึกการใช้งาน เครื่องมือสร้างแบบสอบถามนั้นง่ายต่อการเรียนรู้และช่วยให้เราสร้างแบบสอบถามได้อย่างรวดเร็ว ตัวอย่างเช่น:

const bicycles = ให้ผลตอบแทน Bicycle.query (). whereIn ('locationId', locationIds) .with ('ล็อค') orderBy ('label', 'asc'). fetch ()

แต่แม้เมื่อเราต้องการสิ่งที่ซับซ้อนมากขึ้นเช่นการย้ายข้อมูลการทำธุรกรรมการรวม chucks หรือการสืบค้น "ภาษา SQL ดั้งเดิม" อย่างสมบูรณ์ - ทั้งหมดอยู่ที่นั่นและใช้งานง่าย สำหรับคนรัก MongoDB - adonis ก็รองรับเช่นกัน

3. มีส่วนขยายการตรวจสอบที่มีประโยชน์ ทำให้ง่ายต่อการเขียนกฎตัวอย่างเช่น:

กฎ const = {
  ชื่อผู้ใช้: 'จำเป็น | ไม่ซ้ำ: ผู้ใช้',
  อีเมล: 'จำเป็น | อีเมล | ไม่ซ้ำกัน: ผู้ใช้',
  รหัสผ่าน: 'จำเป็น | ยืนยัน',
  กลุ่ม: 'existIn: Group'
}
const validation = อัตราผลตอบแทน Validator.validate (userData, User.rules)
ถ้า (validation.fails ()) โยนข้อผิดพลาดใหม่การตรวจสอบ (การตรวจสอบ)

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

4. เพียงแค่โบนัส! โดยส่วนตัวแล้วฉันชอบที่ Adonis ใช้และใช้ฟังก์ชั่นเครื่องกำเนิดไฟฟ้า ตัวอย่างเช่น:

// ปาเก็ตตี้ aka คลาสสิก
Users.all ((err, users) => {
  users.bicycles (). fetch ((err, bicycles) => {
    res.send ({ผู้ใช้ bicycles})
  })
})
// วิธีสัญญา
ให้ผู้ใช้ = null
Users.all ()
.then (fetchedUsers => {
  users = fetchedUsers
  return users.bicycles (). fetch ()
})
. แล้ว (จักรยาน => {
  res.send ({ผู้ใช้ bicycles})
})
// วิธีสร้าง (วิธี AdonisJS)
// Yielding หยุดการเรียกใช้โค้ดชั่วคราวจนกว่าฟังก์ชัน async จะเสร็จสิ้น
const users = ให้ผลตอบแทน Users.all ()
const bicycles = ให้ผลกับ users.bicycles (). fetch ()
res.send ({ผู้ใช้ bicycles})

มันทำให้โค้ดมีความชัดเจนมากขึ้น! ไม่มีฟังก์ชั่นการปิดล้อมหรือสัญญาเพิ่มเติมเพียงรหัสง่าย ๆ โดยไม่มีการจัดระเบียบ

จุดด้อย

  1. ไม่มีการตั้งค่าการทดสอบเริ่มต้น การเขียนโค้ดโดยไม่มีการทดสอบ - เป็นวิธีการพัฒนาที่ไร้เดียงสามาก :-) ดังนั้นเราต้องลงทุนเวลาในการติดตั้งการทดสอบของเราเองรอบ ๆ อิเหนา การอัปเดต: การตั้งค่าการทดสอบอย่างเป็นทางการและบทแนะนำจะนำมาใช้ใน Adonis 4.0 ต่อไปนี้
  2. เนื่องจากมีผู้ให้ข้อมูลและผู้ใช้ไม่มากนักบางครั้งคุณยังสามารถตรวจจับข้อบกพร่องในไลบรารีหลักได้ บางส่วนของพวกเขาค่อนข้างชัดเจน :-)
  3. แม้ว่าเอกสารนั้นจะดี แต่ชุมชนก็ยังเล็ก ไม่มีคำตอบมากมายใน StackOverflow และมีบทเรียนไม่มาก (ยกเว้นเป็นทางการ)

แทนที่จะได้ข้อสรุป

เราใช้ AdonisJS ในการผลิตในช่วงหกเดือนที่ผ่านมา มันมีเสถียรภาพและรวดเร็ว เรารักมัน!

หากคุณกำลังมองหากรอบ Node.js ที่ทันสมัยพร้อม ES6 การสนับสนุน Postgres และโครงสร้างที่ดี - ตรวจสอบ Adonis.js

P. S. โครงการล่าสุดของฉัน - https://pingdisco.com คือ 100% adonisjs เป็นเครื่องมือตรวจสอบสถานะการออนไลน์ ลองสร้างบัญชีที่นั่น (กรอกเพียงหนึ่งช่องเท่านั้น) แล้วดูว่าตัวเองรวดเร็วแค่ไหน

P. P. S. และหากคุณต้องการความช่วยเหลือหรือมีปัญหากับกรอบการทำงานอย่าลังเลที่จะส่งข้อความถึง Codementor ให้ฉัน ฉันยังทำเซสชันการสอนซึ่งฉันสามารถแสดงให้คุณเห็นพื้นฐานและแฮ็กเด็ด ๆ ของ Adonis