AdonisJS - det bästa NodeJS-ramverket 2017

För ungefär sex månader sedan sökte jag efter ett alternativ till SailsJS - ett MVC-ramverk för nod. Tyvärr sugde Sails ganska mycket i vissa saker - det var långsamt på POST-förfrågningar, det stödde inte många Postgres-funktioner som transaktioner och det saknade några andra funktioner (till exempel beskrivs här). Men det värsta är att det inte fick en enda större uppdatering under de senaste tre åren.

Så vi började leta efter något att flytta våra nodeJS-projekt till. Vi har provat Koa.js (men det saknade för många saker), Meteor.js (vi behöver verkligen inte allt-i-ett-lösning, bara API), Loopback (för mycket magi) och några till.

Tills jag snubblat in i AdonisJS. För att vara ärlig, även om ramverket har 2,5k startar på github, var det inte lätt att hitta. Men jag kändes omedelbart kär i det. Jag försöker förklara varför.

Pros

1. När man tittar på mappstrukturen och logiken bakom är den nästan identisk med ett superpopulärt PHP-ramverk - Laravel. Och Laravel har en bra genomtänkt struktur som gör att du kan hålla sakerna tydliga. Så om du någonsin har arbetat med det, lär du dig Adonis verkligen snabbt.

2. Dess ORM är gjord med SQL-databaser i åtanke - till exempel Postgres eller MySQL. Det skapar effektiva SQL-frågor och baseras på en aktiv postidé. Dess frågeställare är lätt att lära sig och gör att vi snabbt kan bygga enkla frågor. Till exempel:

constcyklar = avkastning Cykel.fråga (). därIn ('platsId', platsIds) .med ('låser'). orderBy ('etikett', 'asc'). fetch ()

Men även när vi behöver mer komplicerade saker som migrering, transaktioner, sammanfogningar, chuckar eller helt "inhemska SQL-språk" -frågor - det är allt där och lätt att använda. Vad gäller MongoDB-älskare - adonis stöder det också.

3. Den har en praktisk valideringsförlängning. Gör lätt att skriva regler, till exempel:

const regler = {
  användarnamn: "obligatoriskt | unikt: användare",
  e-post: "obligatorisk | e-post | unik: användare",
  lösenord: "obligatoriskt | bekräftat",
  grupp: 'existIn: Group'
}
const validation = utbyte Validator.validate (userData, User.rules)
if (validation.fails ()) kasta nya fel. Validering (validering)

Dessa kontroller kan vara både synkrona eller asynkrona, har åtkomst till databasen eller vad som behövs. Och det kan utökas mycket enkelt, till exempel har vi skrivit en kontroll för att bevisa om det finns en post i vår databas.

4. Bara en bonus! Personligen älskar jag hur Adonis använder och använder generatorfunktioner. Till exempel:

// Klassiskt aka spaghetti sätt
Användare.all ((fel, användare) => {
  användare.cyklar (). hämta ((fel, cyklar) => {
    res.send ({användare, cyklar})
  })
})
// Löfte sätt
låt användare = null
Users.all ()
.then (fetchedUsers => {
  användare = hämtade användare
  returnera användare.cyklar (). hämta ()
})
.then (cyklar => {
  res.send ({användare, cyklar})
})
// Generator sätt (alias AdonisJS sätt)
// Utbyte pausar körning av kod tills async-funktionen är klar
const-användare = ger användare.all ()
constcyklar = ger användare.cyklar (). hämta ()
res.send ({användare, cyklar})

Det gör koden mycket tydligare! Inga fler slutna funktioner eller löften, bara enkel kod utan tabulering.

Nackdelar

  1. Det finns ingen standardtestinställning. Att skriva kod utan tester - är ett mycket naivt sätt att utveckla :-) Så vi var tvungna att investera tid i att implementera vår egen testuppsättning runt Adonis. Uppdateringar: officiell testuppsättning och tutorial kommer att introduceras i följande Adonis 4.0
  2. Eftersom det inte finns många bidragsgivare och användare kan du ibland fortfarande fånga ett fel i kärnbibliotek. Några av dem är ganska uppenbara :-)
  3. Trots att dokumenten är bra är gemenskapen fortfarande liten. Det finns inte många svar på StackOverflow och det finns inte många tutorials (utom det officiella)

I stället för slutsatsen

Vi använder AdonisJS i produktionen under de senaste sex månaderna. Det är stabilt och snabbt. Vi älskar det!

Om du letar efter ett modernt Node.js-ramverk med ES6, Postgres-stöd och en bra struktur - kolla Adonis.js

P. S. Mitt senaste projekt - https://pingdisco.com är 100% adonisjs, det är ett gratis verktyg för övervakning av drifttid. Försök skapa ett konto där (tar bara ett fält att fylla) och se själv hur snabbt och smidigt det är.

P. P. S. Och om du behöver hjälp eller har problem med ramverket, tveka inte att ge mig ett meddelande om Codementor. Jag gör också övningsstudier där jag kan visa dig grunderna och några häftiga hackar av Adonis.