AdonisJS - den beste NodeJS-rammen for 2017

For omtrent seks måneder siden lette jeg etter et alternativ til SailsJS - et MVC Framework for node. Dessverre sugde Sails ganske mye i noen ting - det gikk tregt med POST-forespørsler, det støttet ikke mange Postgres-funksjoner som transaksjoner, og det manglet noen få andre funksjoner (for eksempel beskrevet her). Men det verste av det er at det ikke ble en eneste større oppdatering de tre siste årene.

Så vi begynte å søke etter noe å flytte nodeJS-prosjektene våre til. Vi har prøvd Koa.js (men det manglet for mange ting), Meteor.js (vi trenger egentlig ikke alt-i-ett-løsning, bare API), Loopback (for mye magi) og noen få til.

Helt til jeg snublet inn i AdonisJS. For å være ærlig, selv om rammene har 2,5 000 starter på github, var det ikke lett å finne. Men jeg følte meg umiddelbart forelsket i det. Jeg skal prøve å forklare hvorfor.

Pros

1. Ser man på mappestrukturen og logikken bak, er den nesten identisk med et super populært PHP-rammeverk - Laravel. Og Laravel har en gjennomtenkt struktur, som lar deg holde tingene klare. Så hvis du noen gang har jobbet med det, vil du lære Adonis veldig raskt.

2. ORMen er laget med SQL-databaser i tankene - for eksempel Postgres eller MySQL. Det skaper effektive SQL-spørringer og er basert på en aktiv postidé. Spørrebyggeren er enkel å lære, og lar oss raskt lage enkle spørsmål. For eksempel:

const sykler = gi sykkel.spørsmål (). hvorIn ('locationId', locationIds) .med ('locks'). orderBy ('label', 'asc'). fetch ()

Men selv når vi trenger mer kompliserte ting som migrasjoner, transaksjoner, sammenføyninger, chucks eller helt "native SQL language" -spørsmål - er alt der og enkelt å bruke. Som for MongoDB-elskere - adonis støtter det også.

3. Den har en praktisk valideringsutvidelse. Gjør det enkelt å skrive regler, for eksempel:

const regler = {
  brukernavn: 'påkrevd | unikt: brukere',
  e-post: 'påkrevd | e-post | unik: brukere',
  passord: 'påkrevd | bekreftet',
  gruppe: 'existIn: Group'
}
const validation = yield Validator.validate (userData, User.rules)
Hvis (validation.fails ()) kaster nye feil. Validering (validering)

Disse sjekkene kan være både synkrone eller asynkrone, ha tilgang til databasen eller hva som måtte være nødvendig. Og det kan utvides veldig enkelt, for eksempel har vi skrevet en sjekk for å bevise om det finnes en post i databasen vår.

4. Bare en bonus! Personlig elsker jeg hvordan Adonis bruker og bruker generatorfunksjoner. For eksempel:

// Klassisk aka spaghetti måte
Users.all ((feil, brukere) => {
  brukere.sykler (). hent ((feil, sykler) => {
    res.send ({brukere, sykler})
  })
})
// Løfte måte
la brukere = null
Users.all ()
.then (fetchedUsers => {
  brukere = hentet brukere
  returnere brukere.sykler (). hente ()
})
.then (sykler => {
  res.send ({brukere, sykler})
})
// Generator way (alias AdonisJS måte)
// Yielding stanser kodeutførelse til asyncfunksjonen er fullført
const brukere = gi brukere.all ()
const sykler = gir brukere. sykler (). hente ()
res.send ({brukere, sykler})

Det gjør koden mye tydeligere! Ingen flere lukkede funksjoner eller løfter, bare enkel kode uten tabulering.

Ulemper

  1. Det er ingen standard testoppsett. Å skrive kode uten tester - er en veldig naiv måte å utvikle :-) Så vi måtte investere tid på å implementere vårt eget testoppsett rundt Adonis. Oppdateringer: offisiell testoppsett og opplæring vil bli introdusert i følgende Adonis 4.0
  2. Fordi det ikke er mange bidragsytere og brukere, kan du noen ganger fremdeles ta en feil i kjernebibliotekene. Noen av dem er ganske opplagte :-)
  3. Selv om dokumentene er gode, er samfunnet fremdeles lite. Det er ikke mange svar på StackOverflow, og det er ikke mange opplæringsprogrammer (bortsett fra den offisielle)

I stedet for konklusjon

Vi bruker AdonisJS i produksjon det siste halvåret. Det er stabilt og raskt. Vi elsker det!

Hvis du leter etter et moderne Node.js-rammeverk med ES6, Postgres-støtte og en god struktur - sjekk Adonis.js

P. S. Det siste prosjektet mitt - https://pingdisco.com er 100% adonisjs, det er et gratis overvåkingsverktøy for oppetid. Prøv å opprette en konto der (tar bare ett felt å fylle ut) og se selv hvor raskt og glatt det er.

P. P. S. Og hvis du trenger hjelp eller har problemer med rammen, ikke nøl med å gi meg en melding på Codementor. Jeg gjør også opplæringsøkter hvor jeg kan vise deg det grunnleggende og noen få kule Adonis-hacks.