AdonisJS - khung NodeJS tốt nhất 2017

Khoảng sáu tháng trước, tôi đã tìm kiếm một giải pháp thay thế cho SailsJS - một MVC Framework cho nút. Thật không may, Sails đã thu hút khá nhiều thứ trong một số thứ - nó chậm với các yêu cầu POST, nó không hỗ trợ nhiều chức năng Postgres như giao dịch và nó thiếu một vài tính năng khác (ví dụ, được mô tả ở đây). Nhưng điều tồi tệ nhất là nó đã không nhận được một bản cập nhật lớn trong ba năm qua.

Vì vậy, chúng tôi bắt đầu tìm kiếm một cái gì đó để di chuyển các dự án nodeJS của chúng tôi. Chúng tôi đã thử Koa.js (nhưng nó thiếu quá nhiều thứ), Meteor.js (chúng tôi không thực sự cần giải pháp tất cả trong một, chỉ API), Loopback (quá nhiều phép thuật) và một vài thứ nữa.

Cho đến khi tôi tình cờ gặp AdonisJS. Thành thật mà nói, mặc dù khung có 2,5k bắt đầu trên github, nó không dễ tìm. Nhưng tôi ngay lập tức cảm thấy yêu nó. Tôi sẽ cố gắng giải thích tại sao.

Ưu

1. Nhìn vào cấu trúc thư mục và logic phía sau, nó gần giống với khung công tác PHP siêu phổ biến - Laravel. Và Laravel có một cấu trúc suy nghĩ tốt, cho phép bạn giữ mọi thứ rõ ràng. Vì vậy, nếu bạn đã từng làm việc với nó, bạn sẽ học Adonis rất nhanh.

2. ORM của nó được tạo ra với các cơ sở dữ liệu SQL trong tâm trí - chẳng hạn như Postgres hoặc MySQL. Nó tạo ra các truy vấn SQL hiệu quả và dựa trên ý tưởng hồ sơ hoạt động. Trình xây dựng truy vấn của nó rất dễ học và cho phép chúng tôi xây dựng các truy vấn đơn giản một cách nhanh chóng. Ví dụ:

const xe đạp = suất Xe đạp.query (). trong đó ('locationId', locationIds) .with ('lock'). orderBy ('nhãn', 'asc'). fetch ()

Nhưng ngay cả khi chúng ta cần những thứ phức tạp hơn như di chuyển, giao dịch, tham gia, trò chuyện hoặc hoàn toàn các ngôn ngữ SQL gốc truy vấn SQL - tất cả đều ở đó và dễ sử dụng. Đối với những người yêu thích MongoDB - adonis cũng hỗ trợ nó.

3. Nó có một phần mở rộng xác nhận tiện dụng. Làm cho dễ viết quy tắc, ví dụ:

quy tắc const = {
  tên người dùng: 'bắt buộc | duy nhất: người dùng',
  email: 'bắt buộc | email | duy nhất: người dùng',
  mật khẩu: 'bắt buộc | xác nhận',
  nhóm: 'tồn tại: Nhóm'
}
const verify = suất Validator.validate (userData, User.rules)
if (verify.fails ()) ném lỗi mới. Xác nhận (xác thực)

Các kiểm tra này có thể là đồng bộ hoặc không đồng bộ, có thể truy cập cơ sở dữ liệu hoặc bất cứ điều gì cần thiết. Và nó có thể được mở rộng rất dễ dàng, ví dụ, chúng tôi đã viết một tấm séc để chứng minh liệu một bản ghi có tồn tại trong cơ sở dữ liệu của chúng tôi hay không.

4. Chỉ là một phần thưởng! Cá nhân, tôi thích cách Adonis sử dụng và sử dụng các chức năng của trình tạo. Ví dụ:

// Cách gọi spaghetti cổ điển
Users.all ((err, users) => {
  users.biciking (). fetch ((err, xe đạp) => {
    res.send ({người dùng, xe đạp})
  })
})
// Cách hứa
cho phép người dùng = null
Users.all ()
.then (người dùng tìm nạp => {
  users = fetchedUsers
  trả về người dùng.biciking (). fetch ()
})
.then (xe đạp => {
  res.send ({người dùng, xe đạp})
})
// Cách tạo (còn gọi là cách AdonisJS)
// Mang lại tạm dừng thực thi mã cho đến khi chức năng async kết thúc
const users = suất Users.all ()
const xe đạp = năng suất người dùng.biciking (). fetch ()
res.send ({người dùng, xe đạp})

Nó làm cho mã rõ ràng hơn rất nhiều! Không có nhiều chức năng kèm theo hoặc lời hứa, chỉ có mã đơn giản mà không cần lập bảng.

Nhược điểm

  1. Không có thiết lập thử nghiệm mặc định. Viết mã mà không cần kiểm tra - là một cách phát triển rất ngây thơ :-) Vì vậy, chúng tôi đã phải đầu tư thời gian để thực hiện thiết lập thử nghiệm của riêng mình xung quanh Adonis. Trình cập nhật: thiết lập và hướng dẫn kiểm tra chính thức sẽ được giới thiệu trong Adonis 4.0 sau
  2. Vì không có nhiều người đóng góp và người dùng, đôi khi bạn vẫn có thể gặp lỗi trong các thư viện lõi. Một số trong số chúng là khá rõ ràng :-)
  3. Mặc dù các tài liệu là tốt, cộng đồng vẫn còn nhỏ. Không có nhiều câu trả lời trên StackOverflow và không có nhiều hướng dẫn (ngoại trừ câu hỏi chính thức)

Thay vì kết luận

Chúng tôi đang sử dụng AdonisJS trong sản xuất trong sáu tháng qua. Nó ổn định và nhanh chóng. Chúng tôi yêu nó!

Nếu bạn đang tìm kiếm một khung công tác Node.js hiện đại với ES6, hỗ trợ Postgres và một cấu trúc tốt - hãy kiểm tra Adonis.js

P. S. Dự án mới nhất của tôi - https://pingdisco.com là 100% adonisjs, nó là một công cụ theo dõi thời gian hoạt động miễn phí. Hãy thử tạo một tài khoản ở đó (chỉ mất một trường để điền) và xem bản thân nó nhanh và mượt như thế nào.

P. P. S. Và nếu bạn cần giúp đỡ hoặc có vấn đề với khung, đừng ngại gửi cho tôi một tin nhắn trên Codementor. Tôi cũng thực hiện các buổi hướng dẫn nơi tôi có thể chỉ cho bạn những điều cơ bản và một vài bản hack tuyệt vời của Adonis.