AdonisJS - nejlepší rámec NodeJS roku 2017

Asi před šesti měsíci jsem hledal alternativu pro SailsJS - MVC Framework pro uzel. Bohužel, Sails v některých věcech hodně nasál - na POST požadavcích byl pomalý, nepodporoval mnoho Postgresových funkcí, jako jsou transakce a postrádal několik dalších funkcí (například zde popsáno). Nejhorší z toho je, že za poslední tři roky neobdržela jednu významnou aktualizaci.

Začali jsme tedy hledat něco, k čemu by se naše projekty nodeJS přesunuly. Vyzkoušeli jsme Koa.js (ale chybělo mu příliš mnoho věcí), Meteor.js (opravdu nepotřebujeme řešení typu vše v jednom, pouze API), Loopback (příliš mnoho magie) a několik dalších.

Dokud jsem nenarazil do AdonisJS. Abych byl upřímný, i když rámec má 2,5 g startu na githubu, nebylo snadné ho najít. Ale okamžitě jsem se do toho zamiloval. Pokusím se vysvětlit proč.

Klady

1. Podíváme-li se na strukturu složek a logiku za sebou, je téměř identické s velmi populárním rámcem PHP - Laravel. A Laravel má dobrou promyšlenou strukturu, která vám umožní udržovat věci jasné. Pokud jste s tím někdy pracovali, naučíte se Adonis opravdu rychle.

2. Jeho ORM je vytvořen s ohledem na SQL databáze - jako je Postgres nebo MySQL. Vytváří efektivní dotazy SQL a je založeno na nápadu aktivního záznamu. Jeho tvůrce dotazů se snadno naučí a umožňuje nám rychle vytvářet jednoduché dotazy. Například:

const bicykcles = výnos Bicycle.query (). whereIn ('locationId', locationIds) .with ('lockcks'). orderBy ('label', 'asc'). fetch ()

Ale i když potřebujeme složitější věci, jako jsou migrace, transakce, spojení, sklíčidla nebo dotazy „nativního jazyka SQL“ - vše je tam a snadno se používá. Pokud jde o milovníky MongoDB - Adonis to také podporuje.

3. Má užitečné rozšíření o ověření. Usnadňuje psaní pravidel, například:

const rules = {
  username: 'povinná | jedinečná: users',
  email: 'povinná | email | jedinečná: uživatelé',
  heslo: 'povinné | potvrzeno',
  group:'existIn: Group '
}
const validation = výnos Validator.validate (userData, User.rules)
if (validation.fails ()) vyvolá nové chyby.Validace (validace)

Tyto kontroly mohou být synchronní nebo asynchronní, mohou přistupovat k databázi nebo cokoli jiného. A lze jej velmi snadno rozšířit, například jsme napsali kontrolu, abychom prokázali, zda v naší databázi existuje záznam.

4. Jen bonus! Osobně mám rád, jak Adonis používá a využívá funkce generátoru. Například:

// Klasická alias špagetová cesta
Users.all ((err, users) => {
  users.bicycles (). fetch ((err, bicycle) => {
    res.send ({users, bicycle})
  })
})
// Slibná cesta
nechat uživatele = null
Users.all ()
.then (fetchedUsers => {
  users = fetchedUsers
  return users.bicycles (). fetch ()
})
.tak (kola => {
  res.send ({users, bicycle})
})
// Generátorový způsob (také známý jako AdonisJS)
// Výnos pozastaví provádění kódu, dokud není funkce asynchronizace dokončena
const users = výnos Users.all ()
const bicykcles = výnos users.bicycles (). fetch ()
res.send ({users, bicycle})

Díky tomu je kód mnohem jasnější! Žádné další uzavřené funkce nebo přísliby, pouze jednoduchý kód bez tabulátoru.

Nevýhody

  1. Neexistuje žádné výchozí nastavení testu. Psaní kódu bez testů - je velmi naivní způsob, jak se vyvíjet :-) Takže jsme museli investovat čas do implementace našeho vlastního testovacího nastavení kolem Adonis. Aktualizace: oficiální nastavení testu a výukový program budou představeny v následujícím Adonis 4.0
  2. Protože není mnoho přispěvatelů a uživatelů, někdy můžete stále zachytit chybu v základních knihovnách. Některé z nich jsou zcela zřejmé :-)
  3. Přestože jsou dokumenty dobré, komunita je stále malá. Na StackOverflow není mnoho odpovědí a není mnoho tutoriálů (kromě oficiálních)

Místo závěru

Používáme AdonisJS ve výrobě za posledních šest měsíců. Je stabilní a rychlý. Milujeme to!

Pokud hledáte moderní framework Node.js s ES6, podporou Postgres a dobrou strukturou - podívejte se na Adonis.js

P. S. Můj poslední projekt - https://pingdisco.com je 100% adonisjs, jedná se o bezplatný nástroj pro sledování dostupnosti. Zkuste tam vytvořit účet (vyplnit pouze jedno pole) a uvidíte, jak rychle a hladce to je.

P. P. S. A pokud potřebujete pomoc nebo máte problémy s rámcem, neváhejte mi dát zprávu o Codementoru. Také provádím semináře, kde vám mohu ukázat základy a pár skvělých hacků Adonise.