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 bicycles = урожай Bicycle.query (). whereIn ('locationId', locationIds) .with ('locks'). orderBy ('label', 'asc'). fetch ()

Але навіть коли нам потрібні складніші матеріали, такі як міграції, транзакції, з'єднання, патрони або запити "рідної мови SQL" - це все там і просто у використанні. Що стосується любителів MongoDB - то і adonis підтримує це.

3. Він має зручне розширення для перевірки. Легко писати правила, наприклад:

правила const = {
  ім'я користувача: 'обов'язково | унікально: користувачі',
  електронна адреса: "обов'язково | електронна пошта | унікальна: користувачі"
  пароль: 'обов'язково | підтверджено',
  group: 'існуєIn: Група'
}
const validation = прибутковість Validator.validate (userData, User.rules)
якщо (validation.fails ()) викинути нові помилки. Валідація (перевірка)

Ці перевірки можуть бути як синхронними, так і асинхронними, можуть мати доступ до бази даних або будь-чого, що потрібно. І це можна легко розширити, наприклад, ми написали чек, щоб довести, чи існує запис у нашій базі даних.

4. Просто бонус! Особисто мені подобається, як Адоніс використовує та використовує функції генератора. Наприклад:

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

Це робить код набагато зрозумілішим! Більше немає вкладених функцій чи обіцянок, лише простий код без табуляції.

Мінуси

  1. Немає налаштувань тестування за замовчуванням. Написання коду без тестів - дуже наївний спосіб розвитку :-) Тому нам довелося вкласти час у впровадження власної тестової установки навколо Адоніса. Оновлено: офіційні налаштування тесту та навчальний посібник будуть представлені в наступному 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.