AdonisJS - najlepszy framework NodeJS z 2017 roku

Około sześć miesięcy temu szukałem alternatywy dla SailsJS - frameworka MVC dla węzła. Niestety, Żagle w niektórych rzeczach bardzo mocno ssały - były powolne w przypadku żądań POST, nie obsługiwały wielu funkcji Postgres, takich jak transakcje, i brakowało kilku innych funkcji (na przykład, opisanych tutaj). Ale najgorsze jest to, że w ciągu ostatnich trzech lat nie otrzymano żadnej ważnej aktualizacji.

Zaczęliśmy więc szukać czegoś, do czego moglibyśmy przenieść nasze projekty nodeJS. Wypróbowaliśmy Koa.js (ale brakowało mu zbyt wielu rzeczy), Meteor.js (tak naprawdę nie potrzebujemy kompleksowego rozwiązania, tylko API), Loopback (za dużo magii) i kilka innych.

Dopóki nie natknąłem się na AdonisJS. Szczerze mówiąc, mimo że framework ma 2,5k startów na github, nie było łatwo go znaleźć. Ale od razu zakochałem się w tym. Spróbuję wyjaśnić dlaczego.

Plusy

1. Patrząc na strukturę folderów i logikę z tyłu, jest ona prawie identyczna z bardzo popularną strukturą PHP - Laravel. A Laravel ma dobrą przemyślaną strukturę, która pozwala zachować czystość. Więc jeśli kiedykolwiek z tym pracowałeś, szybko nauczysz się Adonis.

2. ORM jest tworzony z myślą o bazach danych SQL - takich jak Postgres lub MySQL. Tworzy wydajne zapytania SQL i opiera się na idei aktywnego rekordu. Jego konstruktor zapytań jest łatwy do nauczenia i pozwala nam szybko budować proste zapytania. Na przykład:

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

Ale nawet gdy potrzebujemy bardziej skomplikowanych rzeczy, takich jak migracje, transakcje, łączenia, uchwyty lub zapytania w „rodzimym języku SQL” - wszystko jest dostępne i łatwe w użyciu. Jeśli chodzi o miłośników MongoDB - adonis również to obsługuje.

3. Posiada przydatne rozszerzenie sprawdzania poprawności. Ułatwia pisanie reguł, na przykład:

const rules = {
  nazwa użytkownika: „wymagane | unikalne: użytkownicy”,
  email: „wymagany | email | niepowtarzalny: użytkownicy”,
  hasło: „wymagane | potwierdzone”,
  grupa: „istnieje W: Grupa”
}
const validation = return Validator.validate (userData, User.rules)
if (validation.fails ()) zgłasza nowe błędy.Validation (validation)

Kontrole te mogą być zarówno synchroniczne, jak i asynchroniczne, mogą uzyskać dostęp do bazy danych lub cokolwiek innego. Można go bardzo łatwo rozszerzyć, na przykład napisaliśmy czek, aby udowodnić, czy w naszej bazie danych istnieje zapis.

4. Tylko bonus! Osobiście uwielbiam sposób, w jaki Adonis wykorzystuje i wykorzystuje funkcje generatora. Na przykład:

// Klasyczny sposób spaghetti
Users.all ((err, users) => {
  users.bicycles (). fetch ((err, bicycles) => {
    res.send ({users, bicycle})
  })
})
// Obiecuj sposób
pozwól użytkownikom = null
Users.all ()
.then (fetchedUsers => {
  users = fetchedUsers
  return users.bicycles (). fetch ()
})
.then (rowery => {
  res.send ({users, bicycle})
})
// Sposób generatora (znany również jako sposób AdonisJS)
// Wydajność wstrzymuje wykonywanie kodu, dopóki funkcja asynchroniczna nie zostanie zakończona
const users = wydaj Users.all ()
const bicycles = wydaj users.bicycles (). fetch ()
res.send ({users, bicycle})

Sprawia, że ​​kod jest o wiele wyraźniejszy! Nigdy więcej zamkniętych funkcji i obietnic, tylko prosty kod bez tabelki.

Cons

  1. Nie ma domyślnej konfiguracji testu. Pisanie kodu bez testów - to bardzo naiwny sposób programowania :-) Musieliśmy więc poświęcić czas na wdrożenie własnego zestawu testów wokół Adonis. Aktualizacja: oficjalna konfiguracja testu i samouczek zostaną wprowadzone w następującym Adonis 4.0
  2. Ponieważ nie ma wielu współautorów i użytkowników, czasami nadal można wykryć błąd w podstawowych bibliotekach. Niektóre z nich są dość oczywiste :-)
  3. Mimo że dokumenty są dobre, społeczność jest wciąż niewielka. StackOverflow nie ma wielu odpowiedzi i nie ma wielu samouczków (oprócz oficjalnego)

Zamiast zawarcia

Używamy AdonisJS w produkcji przez ostatnie sześć miesięcy. Jest stabilny i szybki. Kochamy to!

Jeśli szukasz nowoczesnego frameworka Node.js z ES6, wsparcia Postgres i dobrej struktury - sprawdź Adonis.js

P. S. Mój najnowszy projekt - https://pingdisco.com to w 100% adonisjs, to bezpłatne narzędzie do monitorowania czasu pracy. Spróbuj utworzyć tam konto (wystarczy jedno pole do wypełnienia) i przekonaj się, jak szybki i płynny.

P. P. S. A jeśli potrzebujesz pomocy lub masz problemy z frameworkiem, nie wahaj się przekazać mi wiadomości na temat Codementor. Robię też sesje instruktażowe, w których mogę przedstawić podstawy i kilka fajnych hacków Adonisa.