AdonisJS - 2017'nin en iyi NodeJS çerçevesi

Yaklaşık altı ay önce, düğüm için bir MVC Çerçevesi olan SailsJS için bir alternatif arıyordum. Maalesef, Yelkenler bazı şeylerde epeyce emdi - POST isteklerinde yavaştı, işlemler gibi birçok Postgres işlevini desteklemedi ve birkaç başka özelliği yoktu (örneğin, burada açıklanmıştır). Fakat en kötüsü, son üç yılda tek bir büyük güncelleme alamamasıydı.

Böylece düğüm projelerimizi taşımak için bir şeyler aramaya başladık. Koa.js'yi denedik (ancak çok fazla şey yoktu), Meteor.js (gerçekten hepsi bir arada çözüme, sadece API'ye ihtiyacımız yok), Loopback (çok fazla sihir) ve bir kaç tane daha.

AdonisJS'e rastlayana kadar. Dürüst olmak gerekirse, çerçevenin 2.5k'ı github'da başlamasına rağmen, bulmak kolay değildi. Ama hemen ona aşık oldum. Nedenini açıklamaya çalışacağım.

Artıları

1. Klasör yapısına ve arkasındaki mantığa baktığımızda, neredeyse popüler bir PHP çerçevesi olan Laravel ile aynıdır. Ve Laravel iyi bir düşünce yapısına sahiptir ve bu da olayları açık tutmanızı sağlar. Eğer onunla daha önce çalıştıysanız, Adonis'i çok çabuk öğreneceksiniz.

2. ORM'si, SQL veritabanlarıyla (Postgres veya MySQL gibi) yapılır. Verimli SQL sorguları yaratır ve aktif kayıt fikrine dayanır. Sorgu oluşturucusunun öğrenmesi kolaydır ve hızlıca basit sorgular oluşturmamızı sağlar. Örneğin:

const bisikletler = verim Bicycle.query (). whereIn ('locationId', locationIds). ('kilitler') ile. orderBy ('label', 'asc').

Ancak, göçler, işlemler, katılımlar, aynalar veya tamamen “yerel SQL dili” sorguları gibi daha karmaşık şeylere ihtiyaç duyduğumuzda bile - hepsi orada ve kullanımı kolaydır. MongoDB sevenler gelince - adonis de bunu destekliyor.

3. Kullanışlı bir doğrulama uzantısına sahiptir. Kural yazmayı kolaylaştırır, örneğin:

const kuralları = {
  kullanıcı adı: 'zorunlu | benzersiz: kullanıcılar',
  e-posta: 'zorunlu | e-posta | benzersiz: kullanıcılar',
  şifre: 'gerekli | onaylandı',
  grup: 'var olan: Grup'
}
const validation = verim Validator.validate (userData, User.rules)
if (validation.fails ()) yeni Errors.Validation (validation) atmak

Bu kontroller hem senkronize hem de asenkron olabilir, veritabanına erişebilir veya ne gerekiyorsa yapılabilir. Ve çok kolay bir şekilde genişletilebilir, örneğin, veritabanımızda bir kaydın olup olmadığını kanıtlamak için bir çek yazdık.

4. Sadece bir bonus! Şahsen, Adonis'in jeneratör fonksiyonlarını nasıl kullandığını ve kullandığını seviyorum. Örneğin:

// Klasik aka spagetti yolu
Users.all ((err, kullanıcılar) => {
  users.bicycles (). Getir ((err, bisikletler) => {
    res.send ({kullanıcılar, bisikletler})
  })
})
// Yol vaat et
kullanıcıların izin ver = null
Users.all ()
.then (fetchedUsers => {
  users = fetchedUsers
  users.bicycles () işlevini döndür
})
. sonra (bisikletler => {
  res.send ({kullanıcılar, bisikletler})
})
// Jeneratör yolu (aka AdonisJS yolu)
// Verim, async işlevi tamamlanıncaya kadar kod yürütülmesini duraklatır
const users = verim Users.all ()
const bisikletleri = verim users.bicycles ().
res.send ({kullanıcılar, bisikletler})

Kodu çok daha net hale getirir! Artık ekli işlev veya vaat yok, sadece tablolama olmadan basit kod.

Eksileri

  1. Varsayılan test kurulumu yoktur. Testler olmadan kod yazmak - çok saf bir gelişmedir :-) Bu yüzden Adonis çevresinde kendi test kurulumumuzu uygulamak için zaman harcadık. Yükseltme: resmi test kurulumu ve öğretici aşağıdaki Adonis 4.0'da tanıtılacaktır.
  2. Katkıda bulunan birçok kişi ve kullanıcı olmadığından, bazen çekirdek kütüphanelerde bir hata yakalayabilirsiniz. Bazıları oldukça açıktır :-)
  3. Dokümanlar iyi olsa da topluluk hala küçük. StackOverflow ile ilgili pek fazla cevap yok ve çok sayıda ders yok (resmi olan hariç)

Sonuç yerine

AdonisJS'i son altı aydır üretimde kullanıyoruz. Kararlı ve hızlı. Onu seviyoruz!

ES6 ile modern bir Node.js çerçevesi arıyorsanız, Postgres desteği ve iyi bir yapı arıyorsanız - Adonis.js sayfasını ziyaret edin.

P. S. Son projem - https://pingdisco.com% 100 adonisjs, ücretsiz bir çalışma süresi izleme aracıdır. Orada bir hesap oluşturmayı deneyin (doldurması sadece bir alan alır) ve kendinizin ne kadar hızlı ve düzgün olduğunu görün.

P. P. S. Yardıma ihtiyacınız varsa veya çerçeveyle ilgili sorunlarınız varsa, bana Codementor hakkında bir mesaj vermekten çekinmeyin. Ayrıca size Adonis'in temellerini ve birkaç harika hack'ünü gösterebileceğim öğretici oturumlar yapıyorum.