AdonisJS - най-добрата рамка на NodeJS за 2017 година

Преди около шест месеца търсех алтернатива за SailsJS - MVC Framework за възел. За съжаление Sails доста смучеше в някои неща - беше бавен при POST заявки, не поддържаше много Postgres функции като транзакции и му липсваха няколко други функции (например описани тук). Но най-лошото е, че през последните три години не получи нито една голяма актуализация.

Така че започнахме да търсим нещо, към което да преместим нашите nodeJS проекти. Опитахме Koa.js (но му липсваха твърде много неща), Meteor.js (всъщност нямаме нужда от цялостно решение, само API), Loopback (твърде много магия) и още няколко.

Докато не се натъкнах на AdonisJS. За да бъда честен, въпреки че рамката има 2.5k стартиране на github, не беше лесно да се намери. Но веднага се почувствах влюбен в него. Ще се опитам да обясня защо.

Професионалисти

1. Гледайки структурата на папката и логиката зад нея, тя е почти идентична на супер популярната PHP рамка - Laravel. А Laravel има добра обмислена структура, която ви позволява да поддържате нещата ясни. Така че, ако някога сте работили с него, бързо ще научите Адонис.

2. Неговата ORM е направена с базата данни на SQL - като Postgres или MySQL. Той създава ефективни SQL заявки и се основава на идеята за активен запис. Съставителят на заявки е лесен за научаване и ни позволява бързо да изграждаме прости заявки. Например:

const велосипеди = добив Bicycle.query (). whereIn ('locationId', locationIds) .with ('заключва'). orderBy ('label', 'asc'). fetch ()

Но дори когато се нуждаем от по-сложни неща като миграции, транзакции, присъединявания, патронници или напълно заявки за „роден SQL език“ - всичко е там и лесно за използване. Що се отнася до любителите на MongoDB - adonis също го поддържа.

3. Има удобно разширение за валидиране. Прави лесно писането на правила, например:

const правила = {
  потребителско име: 'задължително | уникално: потребители',
  имейл: „задължително | имейл | уникален: потребители“,
  парола: 'задължително | потвърдено',
  група: 'съществуваВ: Група'
}
const валидиране = добив Validator.validate (userData, User.rules)
ако (validation.fails ()) хвърли нови грешки.Validation (валидиране)

Тези проверки могат да бъдат едновременно синхронни или асинхронни, да имат достъп до база данни или каквото е необходимо. И може да се разшири много лесно, например, ние написахме чек, за да докажем дали в нашата база данни съществува запис.

4. Просто бонус! Лично аз обичам как Adonis използва и използва генераторни функции. Например:

// Класически ака начин за спагети
Users.all ((грешка, потребители) => {
  users.bicycles (). fetch ((грешка, велосипеди) => {
    res.send ({потребители, велосипеди})
  })
})
// Обещаващ начин
нека потребителите = null
Users.all ()
.then (извлечени потребители => {
  потребители = извлечени потребители
  върнете users.bicycles (). fetch ()
})
.then (велосипеди => {
  res.send ({потребители, велосипеди})
})
// Генератор начин (известен още като AdonisJS начин)
// Добивът спира паузата на изпълнение на кода, докато функцията за асинхронизация приключи
const потребители = добив Users.all ()
const велосипеди = добив users.bicycles (). fetch ()
res.send ({потребители, велосипеди})

Това прави кода много по-ясен! Няма повече затворени функции или обещания, само прост код без таблици.

Против

  1. Няма тестова настройка по подразбиране. Писането на код без тестове - е много наивен начин за развитие :-) Така че трябваше да инвестираме време в прилагането на нашата собствена тестова настройка около Adonis. Upd: официалната тестова настройка и урок ще бъдат представени в следващия Adonis 4.0
  2. Тъй като няма много сътрудници и потребители, понякога все още можете да хванете грешка в основните библиотеки. Някои от тях са съвсем очевидни :-)
  3. Въпреки че документите са добри, общността все още е малка. Няма много отговори на StackOverflow и няма много уроци (с изключение на официалния)

Вместо заключение

Ние използваме AdonisJS в производството през последните шест месеца. Той е стабилен и бърз. Обичаме го!

Ако търсите модерна рамка за Node.js с ES6, поддръжка на Postgres и добра структура - проверете Adonis.js

P. S. Най-новият ми проект - https://pingdisco.com е 100% adonisjs, той е безплатен инструмент за наблюдение на безработица. Опитайте да създадете акаунт там (отнема само едно поле) и вижте сами колко бърза и гладка е.

P. P. S. И ако имате нужда от помощ или имате проблеми с рамката, не се колебайте да ми изпратите съобщение на Codementor. Правя и уроци, където мога да ви покажа основите и няколко готини хака на Adonis.