AdonisJS - cel mai bun cadru NodeJS din 2017

Acum aproximativ șase luni căutam o alternativă pentru SailsJS - un cadru MVC pentru nod. Din păcate, Sails a aspirat destul de mult în unele aspecte - a fost lent la cererile POST, nu a acceptat multe funcții Postgres, cum ar fi tranzacțiile și îi lipseau câteva alte funcții (de exemplu, descrise aici). Dar cel mai rău este că nu a primit o singură actualizare majoră în ultimii trei ani.

Așa că am început să căutăm ceva la care să ne mutăm proiectele nodeJS. Am încercat Koa.js (dar lipseau prea multe lucruri), Meteor.js (nu avem nevoie într-adevăr de soluție all-in-one, doar API), Loopback (prea multă magie) și încă câteva.

Până când am intrat în AdonisJS. Pentru a fi sincer, chiar dacă cadrul are 2,5k începe pe github, nu a fost ușor de găsit. Dar imediat m-am simțit îndrăgostit de ea. Voi încerca să vă explic de ce.

Pro-uri

1. Privind structura folderului și logica din spate, este aproape identic cu un cadru PHP super popular - Laravel. Și Laravel are o structură bine gândită, care vă permite să păstrați lucrurile clare. Deci, dacă ați lucrat vreodată cu acesta, veți învăța Adonis real rapid.

2. ORM-ul său este creat cu baze de date SQL în minte - cum ar fi Postgres sau MySQL. Creează interogări SQL eficiente și se bazează pe ideea de înregistrare activă. Creatorul său de interogări este ușor de învățat și ne permite să construim rapid interogări simple. De exemplu:

const bicycles = randament Bicycle.query (). whereIn ('locationId', locationIds) .cu ('blocări'). orderBy ('label', 'asc'). fetch ()

Dar chiar și atunci când avem nevoie de chestii mai complicate, cum ar fi migrații, tranzacții, aderari, chucks sau întrebări complet „limba SQL native” - este totul acolo și ușor de utilizat. Cât despre iubitorii MongoDB - Adonis îl susține și el.

3. Are o extensie utilă de validare. Face reguli ușor de scris, de exemplu:

const rules = {
  nume utilizator: 'obligatoriu | unic: utilizatori',
  e-mail: 'obligatoriu | e-mail | unic: utilizatori',
  parola: „obligatoriu | confirmat”,
  grup: 'existăIn: grup'
}
valid validation = randament Validator.validate (userData, User.rules)
dacă (validation.fails ()) aruncă noi erori.Validation (validare)

Aceste verificări pot fi atât sincrone, fie asincrone, pot accesa baza de date sau orice este nevoie. Și poate fi extins foarte ușor, de exemplu, am scris un cec pentru a demonstra dacă există o înregistrare în baza noastră de date.

4. Doar un bonus! Personal, îmi place cum Adonis folosește și folosește funcțiile generatorului. De exemplu:

// Mod clasic aka spaghetti
Users.all ((err, utilizatori) => {
  users.bicycles (). fetch ((err, biciclete) => {
    res.send ({utilizatori, biciclete})
  })
})
// Mod de promisiune
lasa utilizatorii = null
Users.all ()
.then (fetchedUsers => {
  utilizatori = fetchedUsers
  return user.bicycles (). fetch ()
})
.then (biciclete => {
  res.send ({utilizatori, biciclete})
})
// Mod generator (aka AdonisJS way)
// Efectuarea întrerupe executarea codului până când funcția async este terminată
utilizatori const = randament Users.all ()
bicicletele const = randamentul utilizatorilor.bicycles (). fetch ()
res.send ({utilizatori, biciclete})

Face codul mult mai clar! Nu mai există funcții sau promisiuni închise, doar cod simplu fără tabulare.

Contra

  1. Nu există nicio configurație de test implicită. Scrierea codului fără teste - este un mod foarte naiv de dezvoltare :-) Așa că a trebuit să investim timp în implementarea propriului test de testare în jurul lui Adonis. Actualizare: configurarea oficială a testului și tutorialul vor fi introduse în următorul program Adonis 4.0
  2. Deoarece nu există mulți contribuitori și utilizatori, uneori puteți încă să prindeți o eroare în bibliotecile de bază. Unele dintre ele sunt destul de evidente :-)
  3. Chiar dacă documentele sunt bune, comunitatea este încă mică. Nu există multe răspunsuri pe StackOverflow și nu există multe tutoriale (cu excepția celui oficial)

În loc de concluzie

Folosim AdonisJS în producție în ultimele șase luni. Este stabil și rapid. Ne place!

Dacă sunteți în căutarea unui cadru modern Node.js cu ES6, suport Postgres și o structură bună - verificați Adonis.js

P. S. Ultimul meu proiect - https://pingdisco.com este 100% adonisjs, este un instrument gratuit de monitorizare a uptime-urilor. Încercați să creați un cont acolo (este nevoie doar de un singur câmp pentru a completa) și vedeți-vă cât de rapid și fără probleme.

P. P. S. Și dacă ai nevoie de ajutor sau ai probleme cu cadrul, nu ezita să-mi dai un mesaj pe Codementor. De asemenea, fac ședințe de tutorial în care vă pot arăta elementele de bază și câteva cântece frumoase de Adonis.