AdonisJS - vuoden 2017 paras NodeJS-kehys

Noin kuusi kuukautta sitten etsin vaihtoehtoa SailsJS: lle - MVC-kehys solmulle. Valitettavasti Purjeet imevät melko paljon tietyissä asioissa - se oli hidas POST-pyynnöissä, se ei tukenut monia Postgres-toimintoja, kuten tapahtumia, ja siinä puuttui muutama muu ominaisuus (esimerkiksi kuvattu tässä). Mutta pahinta on se, että se ei saanut yhtä suurta päivitystä kolmen viime vuoden aikana.

Joten aloimme etsiä jotain siirtämään nodeJS-projektimme. Olemme kokeillut Koa.js: ta (mutta siitä puuttui liikaa asioita), Meteor.js: tä (emme oikeastaan ​​tarvitse all-in-one-ratkaisua, vain API), Loopbackia (liikaa taikuutta) ja muutamaa muuta.

Kunnes kompastuin AdonisJS: iin. Totta puhuen, vaikka kehyksessä on 2,5 k alkaa githubista, sitä ei ollut helppo löytää. Mutta tunsin heti rakkauden siihen. Yritän selittää miksi.

Plussat

1. Tarkasteltaessa kansion rakennetta ja logiikkaa, se on melkein identtinen erittäin suositun PHP-kehyksen - Laravelin kanssa. Ja Laravelilla on hyvä harkittu rakenne, jonka avulla voit pitää asiat selkeinä. Joten jos olet joskus työskennellyt sen kanssa, opit Adonisin todella nopeasti.

2. Sen ORM on tehty SQL-tietokantoja ajatellen - kuten Postgres tai MySQL. Se luo tehokkaita SQL-kyselyitä ja perustuu aktiiviseen tietueideaan. Sen kyselynmuodostaja on helppo oppia ja antaa meille mahdollisuuden luoda yksinkertaisia ​​kyselyitä nopeasti. Esimerkiksi:

const polkupyörät = tuottaa Bicycle.query (). whereIn ('locationId', locationIds) .with ('lukot'). orderBy ('label', 'asc'). fetch ()

Mutta jopa silloin, kun tarvitsemme monimutkaisempia juttuja, kuten siirtymiä, tapahtumia, liittymisiä, iskuja tai täysin ”alkuperäisen SQL-kielen” kyselyjä - se on kaikki siellä ja helppo käyttää. MongoDB-ystäville - myös adonis tukee sitä.

3. Sillä on kätevä vahvistuslaajennus. Helppo kirjoittaa sääntöjä, esimerkiksi:

const säännöt = {
  käyttäjänimi: 'vaaditaan | ainutlaatuinen: käyttäjät',
  sähköposti: 'vaaditaan | sähköposti | ainutlaatuinen: käyttäjät',
  salasana: 'vaaditaan | vahvistettu',
  ryhmä: 'on olemassaIn: Ryhmä'
}
const validation = tuotto Validator.validate (userData, User.rules)
if (validation.fails ()) heittää uusia virheitä.Validation (validation)

Nämä tarkistukset voivat olla sekä synkronisia että asynkronisia, voivat käyttää tietokantaa tai mitä tahansa tarvittavaa. Ja sitä voidaan laajentaa erittäin helposti, esimerkiksi olemme kirjoittaneet tarkistuksen todistaaksesi, onko tietuetta tietokannassamme.

4. Vain bonus! Henkilökohtaisesti rakastan kuinka Adonis käyttää ja hyödyntää generaattoritoimintoja. Esimerkiksi:

// Klassinen aka spagetti tapa
Users.all ((virhe, käyttäjät) => {
  käyttäjät.polkupyörät () .haku ((virhe, polkupyörät) => {
    res.send ({käyttäjät, polkupyörät})
  })
})
// Lupaustapa
anna käyttäjien = nolla
Users.all ()
. sitten (fetchedUsers => {
  users = fetchedUsers
  palauta käyttäjät.polkupyörät () .hae ()
})
. sitten (polkupyörät => {
  res.send ({käyttäjät, polkupyörät})
})
// Generaattoritapa (alias AdonisJS way)
// Tuotto keskeyttää koodin suorittamisen, kunnes async-toiminto on valmis
const users = tuottaa Users.all ()
const polkupyörät = tuottaa käyttäjille.polkupyörät () .haku ()
res.send ({käyttäjät, polkupyörät})

Se tekee koodista paljon selkeämmän! Ei enää suljettuja toimintoja tai lupauksia, vain yksinkertainen koodi ilman taulukointia.

Haittoja

  1. Testin oletusasetuksia ei ole. Koodin kirjoittaminen ilman testejä - on erittäin naiivi tapa kehittää :-) Joten meidän piti investoida aikaa oman testiasetusten toteuttamiseen Adonisin ympärillä. Upd: virallinen testiasetus ja opas otetaan käyttöön seuraavassa Adonis 4.0: ssa
  2. Koska kirjoittajia ja käyttäjiä ei ole paljon, voit joskus löytää virheen ydinkirjastoissa. Jotkut heistä ovat aivan ilmeisiä :-)
  3. Vaikka asiakirjat ovat hyviä, yhteisö on silti pieni. StackOverflow-tietokantaan ei ole monta vastausta eikä opetusohjelmia ole paljon (paitsi virallinen)

Päätelmän sijasta

Käytämme AdonisJS: ää tuotannossa viimeisen kuuden kuukauden ajan. Se on vakaa ja nopea. Me rakastamme sitä!

Jos etsit modernia Node.js-kehystä, jossa on ES6, Postgres-tuki ja hyvä rakenne - tarkista Adonis.js

P. S. Viimeisin projektini - https://pingdisco.com on 100% adonisjs, se on ilmainen käytettävyyden seurantatyökalu. Kokeile luoda tili sinne (täyttää vain yhden kentän) ja nähdä itsesi kuinka nopea ja sujuva se on.

P. P. S. Ja jos tarvitset apua tai sinulla on ongelmia puitteiden kanssa, älä epäröi antaa minulle viestin Codementorista. Teen myös opetusohjelmaistuntoja, joissa voin näyttää sinulle perustiedot ja muutaman hienon hakkeroinnin Adonisista.