AdonisJS - labākais 2017. gada NodeJS ietvars

Apmēram pirms sešiem mēnešiem es meklēju alternatīvu SailsJS - mezgla MVC ietvaru. Diemžēl buras dažās lietās iesūc diezgan daudz - POST pieprasījumos tas bija lēns, neatbalstīja daudzas Postgres funkcijas, piemēram, darījumus, un tam trūka dažu citu funkciju (piemēram, aprakstītas šeit). Bet vissliktākais ir tas, ka pēdējos trīs gados tas nav ieguvis nevienu būtisku atjauninājumu.

Tāpēc mēs sākām kaut ko meklēt, lai pārvietotu mūsu nodeJS projektus. Mēs esam izmēģinājuši Koa.js (bet tajā trūka pārāk daudz lietu), Meteor.js (mums nav īsti vajadzīgs viss-vienā risinājums, tikai API), Loopback (pārāk daudz maģijas) un vēl dažus.

Līdz es paklupau AdonisJS. Godīgi sakot, kaut arī ietvarstruktūrā 2,5 g sākas github, to nebija viegli atrast. Bet es uzreiz jutos tajā iemīlējusies. Es mēģināšu izskaidrot, kāpēc.

Plusi

1. Skatoties uz mapes struktūru un loģiku, tā ir gandrīz identiska īpaši populārajam PHP ietvaram - Laravel. Un Laravel ir laba pārdomāta struktūra, kas ļauj jums saglabāt lietas skaidrību. Tātad, ja jūs kādreiz esat strādājis ar to, jūs ātri iemācīsities Adonis.

2. Tā ORM tiek izveidots, paturot prātā SQL datu bāzes - piemēram, Postgres vai MySQL. Tas rada efektīvus SQL vaicājumus un ir balstīts uz aktīvu ierakstu ideju. Tā vaicājumu veidotāju ir viegli iemācīties un tas ļauj mums ātri izveidot vienkāršus vaicājumus. Piemēram:

const velosipēdi = dodiet Bicycle.query (). kurIn ('locationId', locationIds) .with ('locks'). orderBy ('label', 'asc'). fetch ()

Bet pat tad, ja mums ir vajadzīgas sarežģītākas lietas, piemēram, migrācija, darījumi, pievienošanās, patronas vai pilnīgi “vietējās SQL valodas” vaicājumi - tas viss ir un ērti lietojams. Kas attiecas uz MongoDB cienītājiem - arī adonis to atbalsta.

3. Tam ir ērts validācijas paplašinājums. Padara vienkāršu noteikumu rakstīšanu, piemēram:

const noteikumi = {
  lietotājvārds: “nepieciešams | unikāls: lietotāji”,
  e-pasts: “nepieciešams | e-pasts | unikāls: lietotāji”,
  parole: “nepieciešams | apstiprināts”,
  grupa: 'pastāvIn: grupa'
}
const validācija = raža Validator.validate (userData, User.rules)
if (validation.fails ()) izmet jaunas kļūdas.validācija (validācija)

Šīs pārbaudes var būt gan sinhronas, gan asinhronas, var piekļūt datu bāzei vai jebkurai citai nepieciešamajai. Un to var ļoti viegli pagarināt, piemēram, mēs esam uzrakstījuši čeku, lai pierādītu, vai ieraksts pastāv mūsu datu bāzē.

4. Tikai bonuss! Personīgi man patīk, kā Adonis izmanto un izmanto ģeneratora funkcijas. Piemēram:

// Klasiskais aka spageti veids
Users.all ((kļūda, lietotāji) => {
  lietotāji.velosipēdi (). atnest ((kļūda, velosipēdi) => {
    res.send ({lietotāji, velosipēdi})
  })
})
// Solījumu veids
ļaujiet lietotājiem = nulle
Lietotāji.all ()
.tad (atnestieLietotāji => {
  lietotāji = fetchedUsers
  atgriezt lietotājiem velosipēdus (). atnest ()
})
.tad (velosipēdi => {
  res.send ({lietotāji, velosipēdi})
})
// Ģeneratora veids (pazīstams arī kā AdonisJS veids)
// Ražošana aptur koda izpildi, līdz async funkcija ir pabeigta
const lietotāji = ražotāji Users.all ()
const velosipēdi = dod lietotājiem. velosipēdi (). atnest ()
res.send ({lietotāji, velosipēdi})

Tas padara kodu daudz skaidrāku! Ne vairāk slēgtu funkciju vai solījumu, tikai vienkāršs kods bez tabulas.

Mīnusi

  1. Nav noklusējuma testa iestatīšanas. Koda rakstīšana bez testiem - ir ļoti naivs attīstības veids :-) Tāpēc mums nācās ieguldīt laiku sava testa iestatīšanas ieviešanai ap Adonis. Upd: oficiālā testa iestatīšana un apmācība tiks ieviesta šajā Adonis 4.0
  2. Tā kā ieguldītāju un lietotāju nav daudz, dažreiz jūs joprojām varat atrast kļūdu galvenajās bibliotēkās. Daži no tiem ir diezgan acīmredzami :-)
  3. Kaut arī dokumenti ir labi, kopiena joprojām ir maza. Vietnē StackOverflow nav daudz atbilžu, un nav daudz konsultāciju (izņemot oficiālo)

Secinājuma vietā

Mēs AdonisJS izmantojam ražošanā pēdējos sešus mēnešus. Tas ir stabils un ātrs. Mēs mīlam to!

Ja jūs meklējat modernu Node.js ietvaru ar ES6, Postgres atbalstu un labu struktūru - pārbaudiet Adonis.js

P. S. Mans jaunākais projekts - https://pingdisco.com ir 100% adonisjs, tas ir bezmaksas uptime uzraudzības rīks. Mēģiniet izveidot kontu tur (aizpildīšanai nepieciešams tikai viens lauks) un apskatiet, cik ātrs un vienmērīgs tas ir.

P. P. S. Un, ja jums ir nepieciešama palīdzība vai rodas problēmas ar sistēmu, nevilcinieties, dodiet man ziņu par Codementor. Es arī veicu apmācības sesijas, kurās es jums varu parādīt Adonis pamatus un dažus lieliskus hacks.