AdonisJS - den bedste NodeJS ramme for 2017

For ca. seks måneder siden søgte jeg efter et alternativ til SailsJS - en MVC-ramme til node. Desværre sugede Sejl ret meget i nogle ting - det var langsomt med POST-anmodninger, det understøttede ikke mange Postgres-funktioner såsom transaktioner, og det manglede et par andre funktioner (for eksempel beskrevet her). Men det værste er, at det ikke fik en eneste større opdatering i de sidste tre år.

Så vi begyndte at søge efter noget at flytte vores nodeJS-projekter til. Vi har prøvet Koa.js (men det manglede for mange ting), Meteor.js (vi har ikke virkelig brug for alt-i-én-løsning, kun API), Loopback (for meget magi) og et par flere.

Indtil jeg snuble ind i AdonisJS. For at være ærlig, selvom rammen har 2,5 k starter på github, var det ikke let at finde. Men jeg følte mig straks forelsket i det. Jeg prøver at forklare hvorfor.

Fordele

1. Når man ser på mappestrukturen og logikken bag, er den næsten identisk med en super populær PHP-ramme - Laravel. Og Laravel har en god gennemtænkt struktur, som giver dig mulighed for at holde tingene klare. Så hvis du nogensinde har arbejdet med det, lærer du Adonis virkelig hurtigt.

2. Dets ORM er lavet med SQL-databaser i tankerne - såsom Postgres eller MySQL. Det skaber effektive SQL-forespørgsler og er baseret på en aktiv rekordidee. Dens forespørgselsbygger er let at lære og giver os mulighed for hurtigt at opbygge enkle forespørgsler. For eksempel:

const bicycles = give Bicycle.query (). WhereIn ('locationId', locationIds) .med ('locks'). orderBy ('label', 'asc'). fetch ()

Men selv når vi har brug for mere komplicerede ting som migrationer, transaktioner, sammenføjninger, chucks eller helt "native SQL-sprog" -forespørgsler - er det hele der og let at bruge. Hvad angår MongoDB-elskere - adonis understøtter det også.

3. Den har en praktisk valideringsudvidelse. Gør let at skrive regler, for eksempel:

const regler = {
  brugernavn: 'krævet | unikt: brugere',
  e-mail: 'krævet | e-mail | unik: brugere',
  adgangskode: 'krævet | bekræftet',
  gruppe: 'existIn: Group'
}
const validation = udbytte Validator.validate (userData, User.rules)
hvis (validation.fails ()) kaster nye fejl. Validering (validering)

Disse kontroller kan være både synkrone eller asynkrone, få adgang til databasen eller hvad der er nødvendigt. Og det kan udvides meget let, for eksempel har vi skrevet en check for at bevise, om der findes en post i vores database.

4. Bare en bonus! Personligt elsker jeg, hvordan Adonis bruger og bruger generatorfunktioner. For eksempel:

// Klassisk alias spaghetti måde
Users.all ((fejle, brugere) => {
  brugere.cykler (). hent ((fejle, cykler) => {
    res.send ({brugere, cykler})
  })
})
// Løfte måde
lad brugere = null
Users.all ()
.then (fetchedUsers => {
  brugere = hentet brugere
  returnere brugere.cykler (). hente ()
})
.then (cykler => {
  res.send ({brugere, cykler})
})
// Generator måde (alias AdonisJS måde)
// Yielding pauser kodeudførelse, indtil async-funktionen er færdig
const brugere = give brugere.all ()
const cykler = give brugere. cykler (). hente ()
res.send ({brugere, cykler})

Det gør koden meget klarere! Ikke flere lukkede funktioner eller løfter, kun enkel kode uden tabulering.

Ulemper

  1. Der er ingen standard testopsætning. Skrivning af kode uden test - er en meget naiv måde at udvikle :-) Så vi var nødt til at investere tid i at implementere vores eget testopsætning omkring Adonis. Opdateringer: officiel testopsætning og tutorial introduceres i følgende Adonis 4.0
  2. Da der ikke er mange bidragydere og brugere, kan du sommetider stadig fange en fejl i kernebiblioteker. Nogle af dem er ganske indlysende :-)
  3. Selvom dokumenterne er gode, er samfundet stadig lille. Der er ikke mange svar på StackOverflow, og der er ikke mange tutorials (undtagen den officielle)

I stedet for konklusion

Vi bruger AdonisJS i produktionen i de sidste seks måneder. Det er stabilt og hurtigt. Vi elsker det!

Hvis du leder efter en moderne Node.js-ramme med ES6, Postgres support og en god struktur - tjek Adonis.js

P. S. Mit seneste projekt - https://pingdisco.com er 100% adonisjs, det er et gratis oppetidsovervågningsværktøj. Prøv at oprette en konto der (tager kun et felt at udfylde) og se dig selv, hvor hurtig og glat den er.

P. P. S. Og hvis du har brug for hjælp eller har problemer med rammen, så tøv ikke med at give mig en besked om Codementor. Jeg laver også tutorials sessioner, hvor jeg kan vise dig det grundlæggende og et par seje hacks med Adonis.