AdonisJS - лучший NodeJS каркас 2017 года

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

Таким образом, мы начали искать что-то, чтобы переместить наши проекты nodeJS. Мы пробовали Koa.js (но ему не хватало слишком много вещей), Meteor.js (нам действительно не нужно решение «все в одном», только API), Loopback (слишком много магии) и еще несколько.

Пока я не наткнулся на AdonisJS. Честно говоря, несмотря на то, что фреймворк имеет 2.5k запусков на github, найти его было нелегко. Но я сразу же влюбился в это. Я постараюсь объяснить, почему.

Pros

1. Если посмотреть на структуру папок и логику, то она практически идентична супер-популярному PHP-фреймворку - Laravel. И у Laravel есть хорошо продуманная структура, которая позволяет вам сохранять ясность. Так что, если вы когда-либо работали с ним, вы очень быстро выучите Adonis.

2. Его ORM сделан с учетом SQL-баз данных - таких как Postgres или MySQL. Он создает эффективные SQL-запросы и основан на идее активной записи. Его конструктор запросов прост в освоении и позволяет быстро создавать простые запросы. Например:

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

Но даже когда нам нужны более сложные вещи, такие как миграции, транзакции, объединения, проверки или запросы «на родном языке SQL» - все это легко и просто использовать. Что касается любителей MongoDB - adonis это тоже поддерживает.

3. Имеет удобное расширение проверки. Облегчает написание правил, например:

const rules = {
  имя пользователя: 'требуется | уникальный: пользователи',
  электронная почта: 'требуется | электронная почта | уникальная: пользователи',
  пароль: «обязательно | подтверждено»,
  группа: 'существует в: группа'
}
const validation = yield Validator.validate (userData, User.rules)
if (validation.fails ()) генерирует новые ошибки. Проверка (проверка)

Эти проверки могут быть как синхронными, так и асинхронными, могут обращаться к базе данных или к чему угодно. И его можно очень легко расширить, например, мы написали проверку, чтобы доказать, существует ли запись в нашей базе данных.

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

// Классический ака спагетти
Users.all ((err, users) => {
  users.bicycles (). fetch ((err, bicycles) => {
    res.send ({пользователи, велосипеды})
  })
})
// Способ обещания
let users = null
Users.all ()
.then (fetchedUsers => {
  users = fetchedUsers
  вернуть users.bicycles (). fetch ()
})
.then (велосипеды => {
  res.send ({пользователи, велосипеды})
})
// Путь генератора (он же AdonisJS)
// Даем паузу выполнения кода до завершения асинхронной функции
const users = yield Users.all ()
const bicycles = yield users.bicycles (). fetch ()
res.send ({пользователи, велосипеды})

Это делает код намного понятнее! Больше никаких вложенных функций или обещаний, только простой код без табуляции.

Cons

  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. Я также делаю учебные занятия, где я могу показать вам основы и несколько классных хаков Адониса.