AdonisJS - najbolji okvir NodeJS-a za 2017. godinu

Prije otprilike šest mjeseci tražio sam alternativu za SailsJS - MVC Framework za čvor. Na žalost, Sails je dosta usisao u nekim stvarima - bio je spor na POST zahtjevima, nije podržavao mnoge Postgres funkcije poput transakcija i nedostajalo mu je nekoliko drugih značajki (na primjer, ovdje opisanih). Ali najgore je što nije dobio niti jedan veći update u posljednje tri godine.

Pa smo počeli tražiti nešto na što bismo premjestili naše nodeJS projekte. Isprobali smo Koa.js (ali nedostajalo mu je previše stvari), Meteor.js (zapravo nam ne treba rješenje sve u jednom, samo API), Loopback (previše magije) i još nekoliko.

Sve dok nisam naleteo na AdonisJS. Da budem iskren, iako okvir ima 2.5k starta na githubu, nije ga bilo lako pronaći. Ali odmah sam se osjećao zaljubljenim u to. Pokušat ću objasniti zašto.

prozodija

1. Gledajući strukturu mape i logiku koja stoji iza nje, gotovo je identičan super popularnom PHP-okviru - Laravelu. A Laravel ima dobru promišljenu strukturu koja vam omogućuje da stvari ostanete jasni. Ako ste ikada radili s tim, brzo ćete naučiti Adonisa.

2. Njegov ORM izrađen je u vidu SQL baze podataka - poput Postgres-a ili MySQL-a. Stvara učinkovite SQL upite i temelji se na ideji aktivnog snimanja. Njegov je program za izradu upita lako naučiti i omogućava nam da brzo izradimo jednostavne upite. Na primjer:

const bicycles = prinosi Bicycle.query (). gdje je in ('locationId', locationIds) .with ('zaključava'). orderBy ('label', 'asc'). fetch ()

Ali čak i kada nam trebaju složenije stvari poput migracija, transakcija, pridruživanja, stezanja ili potpuno upita "izvornog jezika SQL-a" - sve je tu i jednostavno za korištenje. Što se tiče ljubitelja MongoDB - adonis to također podržava.

3. Ima zgodan nastavak za provjeru valjanosti. Na primjer, možete jednostavno pisati pravila:

pravila const = {
  korisničko ime: 'obavezno | jedinstveno: korisnici',
  e-pošta: 'obavezna | e-pošta | jedinstvena: korisnici',
  lozinka: 'Obavezno | potvrđeno',
  grupa: 'postojiIn: grupa'
}
const validation = prinos Validator.validate (userData, User.rules)
ako (validation.fails ()) baci nove Pogreške.Validation (provjera)

Te provjere mogu biti sinkroni ili asinhroni, mogu pristupiti bazi podataka ili bilo čemu što je potrebno. I može se vrlo lako proširiti, na primjer, napisali smo ček kako bismo dokazali da u našoj bazi podataka postoji zapis.

4. Samo bonus! Osobno mi se sviđa kako Adonis koristi i koristi funkcije generatora. Na primjer:

// Klasični aka način špageta
Users.all ((greška, korisnici) => {
  users.bicycles (). dohvatiti ((pogreška, bicikli) => {
    res.send ({korisnici, bicikli})
  })
})
// Promise način
neka korisnici = null
Users.All ()
. tada (dohvaćeni korisnici => {
  korisnici = dohvaćeni korisnici
  vratiti users.bicycles (). fetch ()
})
. tada (bicikli => {
  res.send ({korisnici, bicikli})
})
// Generatorski način (aka AdonisJS način)
// Prinos dovodi do zaustavljanja izvršavanja koda dok funkcija asinhronizacije nije završena
const korisnici = prinosi Users.all ()
const bicycles = dobri korisnici.bicycles (). fetch ()
res.send ({korisnici, bicikli})

To čini kod mnogo jasnijim! Nema više zatvorenih funkcija ili obećanja, samo je jednostavan kod bez tabulacije.

kontra

  1. Nema zadanih postavki testiranja. Pisanje koda bez testova - vrlo je naivan način razvoja :-) Stoga smo morali uložiti vrijeme u implementaciju vlastitog testnog postava oko Adonisa. Ažurirano: službene testne upute i upute bit će predstavljeni u sljedećem Adonisu 4.0
  2. Budući da nema mnogo suradnika i korisnika, ponekad se ipak može dogoditi pogreška u osnovnim knjižnicama. Neki od njih su sasvim očiti :-)
  3. Iako su dokumenti dobri, zajednica je još uvijek mala. Na StackOverflowu nema puno odgovora i nema puno tutorijala (osim službenog)

Umjesto zaključka

U proizvodnji koristimo AdonisJS zadnjih šest mjeseci. Stabilan je i brz. Volimo ga!

Ako tražite moderan Node.js okvir s ES6, Postgres podrškom i dobrom strukturom - provjerite Adonis.js

P. S. Moj posljednji projekt - https://pingdisco.com je 100% adonisjs, to je besplatni alat za nadgledanje. Pokušajte tamo stvoriti račun (samo jedno polje treba popuniti) i uvjerite se koliko je brzo i glatko.

P. P. S. A ako vam treba pomoć ili imate problema s okvirom, nemojte oklijevati da mi pošaljete poruku o Codementoru. Radim i tutorialne sesije gdje vam mogu pokazati osnove i nekoliko zgodnih hakova Adonisa.