AdonisJS - het beste NodeJS-framework van 2017

Ongeveer zes maanden geleden was ik op zoek naar een alternatief voor SailsJS - een MVC Framework voor node. Helaas heeft Sails in sommige dingen nogal wat opgezogen - het was traag op POST-aanvragen, het ondersteunde niet veel Postgres-functies zoals transacties en het ontbrak aan een paar andere functies (bijvoorbeeld hier beschreven). Maar het ergste is dat het de afgelopen drie jaar geen enkele grote update heeft gekregen.

Dus gingen we op zoek naar iets om onze nodeJS-projecten naartoe te verplaatsen. We hebben Koa.js geprobeerd (maar het ontbrak te veel dingen), Meteor.js (we hebben niet echt alles-in-één oplossing nodig, alleen API), Loopback (te veel magie) en nog een paar.

Totdat ik AdonisJS tegenkwam. Om eerlijk te zijn, hoewel het framework 2.5k begint op github, was het niet gemakkelijk te vinden. Maar ik werd er meteen verliefd op. Ik zal proberen uit te leggen waarom.

Pros

1. Kijkend naar de mappenstructuur en de logica erachter, is het bijna identiek aan een super populair PHP-framework - Laravel. En Laravel heeft een goed doordachte structuur, waarmee je de dingen helder kunt houden. Dus als je er ooit mee hebt gewerkt, zul je Adonis heel snel leren.

2. De ORM is gemaakt met SQL-databases in gedachten - zoals Postgres of MySQL. Het creëert efficiënte SQL-query's en is gebaseerd op een actief recordidee. De querybuilder is eenvoudig te leren en stelt ons in staat om snel eenvoudige query's te bouwen. Bijvoorbeeld:

const bicycles = opbrengst Bicycle.query (). whereIn ('locationId', locationIds) .with ('locks'). orderBy ('label', 'asc'). fetch ()

Maar zelfs als we meer gecompliceerde dingen nodig hebben, zoals migraties, transacties, joins, chucks of volledig "native SQL-taal" -vragen - het is er allemaal en gemakkelijk te gebruiken. Wat MongoDB-liefhebbers betreft - adonis ondersteunt dit ook.

3. Het heeft een handige validatie-extensie. Maakt het eenvoudig om regels te schrijven, bijvoorbeeld:

const rules = {
  gebruikersnaam: 'vereist | uniek: gebruikers',
  email: 'verplicht | email | uniek: gebruikers',
  wachtwoord: 'vereist | bevestigd',
  groep: 'existIn: Group'
}
const validatie = opbrengst Validator.validate (userData, User.rules)
if (validation.fails ()) gooi nieuwe fouten. validatie (validatie)

Deze controles kunnen zowel synchroon als asynchroon zijn, hebben toegang tot de database of wat nodig is. En het kan heel gemakkelijk worden uitgebreid, we hebben bijvoorbeeld een cheque geschreven om te bewijzen of er een record in onze database bestaat.

4. Gewoon een bonus! Persoonlijk ben ik dol op hoe Adonis generatorfuncties gebruikt en gebruikt. Bijvoorbeeld:

// Klassieke aka spaghetti manier
Users.all ((fout, gebruikers) => {
  users.bicycles (). fetch ((err, fietsen) => {
    res.send ({gebruikers, fietsen})
  })
})
// Promise way
laat gebruikers = null
Users.all ()
.then (fetchedUsers => {
  gebruikers = fetchedUsers
  return users.bicycles (). fetch ()
})
.then (fietsen => {
  res.send ({gebruikers, fietsen})
})
// Generator-manier (ook bekend als AdonisJS-manier)
// Opbrengst pauzeert de uitvoering van de code totdat de asynchrone functie is voltooid
const users = opbrengst Users.all ()
const bicycles = opbrengst users.bicycles (). fetch ()
res.send ({gebruikers, fietsen})

Het maakt de code een stuk duidelijker! Geen ingesloten functies of beloften meer, alleen eenvoudige code zonder tabulatie.

Cons

  1. Er is geen standaard testinstelling. Code schrijven zonder tests - is een zeer naïeve manier om te ontwikkelen :-) Dus moesten we tijd investeren in het implementeren van onze eigen testopstelling rond Adonis. Upd: officiële testopstelling en zelfstudie worden geïntroduceerd in de volgende Adonis 4.0
  2. Omdat er niet veel bijdragers en gebruikers zijn, kunt u soms nog steeds een bug in kernbibliotheken tegenkomen. Sommigen van hen zijn vrij duidelijk :-)
  3. Hoewel de documenten goed zijn, is de community nog steeds klein. Er zijn niet veel antwoorden op StackOverflow en er zijn niet veel tutorials (behalve de officiële)

In plaats van conclusie

We gebruiken AdonisJS de afgelopen zes maanden in productie. Het is stabiel en snel. We houden ervan!

Als u op zoek bent naar een modern Node.js-framework met ES6, Postgres-ondersteuning en een goede structuur - kijk dan op Adonis.js

P. S. Mijn nieuwste project - https://pingdisco.com is 100% adonisjs, het is een gratis uptime monitoring tool. Probeer daar een account aan te maken (u hoeft slechts één veld in te vullen) en zie zelf hoe snel en soepel het is.

P. P. S. En als u hulp nodig hebt of problemen hebt met het framework, aarzel dan niet om me een bericht te sturen over Codementor. Ik doe ook tutorialsessies waar ik je de basisprincipes en een paar coole hacks van Adonis kan laten zien.