AdonisJS - kerangka kerja NodeJS terbaik 2017

Sekitar enam bulan lalu saya sedang mencari alternatif untuk SailsJS - sebuah kerangka kerja MVC untuk simpul. Sayangnya, Sails menyedot cukup banyak dalam beberapa hal - lambat pada permintaan POST, itu tidak mendukung banyak fungsi Postgres seperti transaksi dan tidak memiliki beberapa fitur lainnya (misalnya, dijelaskan di sini). Tetapi yang terburuk adalah bahwa itu tidak mendapatkan pembaruan besar tunggal dalam tiga tahun terakhir.

Jadi kami mulai mencari sesuatu untuk memindahkan proyek nodeJS kami. Kami sudah mencoba Koa.js (tapi itu kurang banyak hal), Meteor.js (kami tidak benar-benar membutuhkan solusi lengkap, hanya API), Loopback (terlalu banyak sihir) dan beberapa lagi.

Sampai saya menemukan AdonisJS. Sejujurnya, meskipun kerangka kerja memiliki 2.5k dimulai pada github, itu tidak mudah ditemukan. Tapi saya langsung merasakannya. Saya akan mencoba menjelaskan alasannya.

Pro

1. Melihat pada struktur folder dan logika di belakang, hampir identik dengan kerangka kerja PHP yang sangat populer - Laravel. Dan Laravel memiliki struktur pemikiran yang baik, yang memungkinkan Anda untuk menjaga semuanya tetap jelas. Jadi jika Anda pernah bekerja dengannya, Anda akan belajar Adonis dengan sangat cepat.

2. ORM-nya dibuat dengan mengingat basis data SQL - seperti Postgres atau MySQL. Ini menciptakan SQL-queries yang efisien dan didasarkan pada ide rekaman aktif. Pembuat kuerinya mudah dipelajari dan memungkinkan kami membangun kueri sederhana dengan cepat. Sebagai contoh:

const bicycles = hasil Bicycle.query (). whereIn ('locationId', locationIds) .with ('locks'). orderBy ('label', 'asc'). fetch ()

Tetapi bahkan ketika kita membutuhkan hal-hal yang lebih rumit seperti migrasi, transaksi, bergabung, chuck atau pertanyaan "bahasa SQL asli" sepenuhnya - itu semua ada dan mudah digunakan. Adapun pecinta MongoDB - adonis mendukungnya juga.

3. Ini memiliki ekstensi validasi berguna. Mudah untuk menulis aturan, misalnya:

aturan const = {
  nama pengguna: 'wajib | unik: pengguna',
  email: 'wajib | email | unik: pengguna',
  kata sandi: 'wajib | dikonfirmasi',
  grup: 'adaIn: Grup'
}
validasi const = hasil Validator.validate (userData, User.rules)
if (validation.fails ()) melempar Kesalahan baru. Validasi (validasi)

Pemeriksaan ini dapat bersifat sinkron atau asinkron, dapat mengakses basis data atau apa pun yang diperlukan. Dan itu dapat diperpanjang dengan sangat mudah, misalnya, kami telah menulis cek untuk membuktikan apakah ada catatan di basis data kami.

4. Hanya bonus! Secara pribadi, saya suka bagaimana Adonis menggunakan dan menggunakan fungsi generator. Sebagai contoh:

// Cara klasik alias spageti
Users.all ((err, users) => {
  users.bicycles (). fetch ((err, bicycles) => {
    res.send ({pengguna, sepeda})
  })
})
// Cara yang dijanjikan
biarkan pengguna = nol
Users.all ()
.then (fetchedUsers => {
  users = fetchedUsers
  kembali users.bicycles (). fetch ()
})
.then (bicycles => {
  res.send ({pengguna, sepeda})
})
// Cara Generator (alias Cara AdonisJS)
// Menghasilkan jeda eksekusi kode hingga fungsi async selesai
const users = hasilkan Users.all ()
const bicycles = hasilkan users.bicycles (). fetch ()
res.send ({pengguna, sepeda})

Itu membuat kode jauh lebih jelas! Tidak ada lagi fungsi atau janji terlampir, hanya kode sederhana tanpa tabulasi.

Cons

  1. Tidak ada pengaturan tes standar. Menulis kode tanpa tes - adalah cara yang sangat naif untuk mengembangkan :-) Jadi kami harus menginvestasikan waktu untuk mengimplementasikan pengaturan pengujian kami sendiri di sekitar Adonis. Pembaruan: pengaturan tes resmi dan tutorial akan diperkenalkan di Adonis 4.0 berikut
  2. Karena tidak banyak kontributor dan pengguna, kadang-kadang Anda masih dapat menangkap bug di pustaka inti. Beberapa dari mereka cukup jelas :-)
  3. Meskipun dokumennya bagus, komunitasnya masih kecil. Tidak ada banyak jawaban di StackOverflow dan tidak ada banyak tutorial (kecuali yang resmi)

Alih-alih kesimpulan

Kami menggunakan AdonisJS dalam produksi selama enam bulan terakhir. Itu stabil dan cepat. Kami menyukainya!

Jika Anda mencari kerangka kerja Node.js modern dengan ES6, dukungan Postgres dan struktur yang baik - lihat Adonis.js

P. S. Proyek terbaru saya - https://pingdisco.com adalah 100% adonisjs, ini adalah alat pemantauan uptime gratis. Coba buat akun di sana (hanya perlu satu bidang untuk diisi) dan lihat sendiri seberapa cepat dan lancarnya.

P. P. S. Dan jika Anda membutuhkan bantuan atau memiliki masalah dengan kerangka kerja, jangan ragu untuk memberi saya pesan tentang Codementor. Saya juga melakukan sesi tutorial di mana saya dapat menunjukkan kepada Anda dasar-dasar dan beberapa hack keren Adonis.