Дежавю От Laravel к AdonisJs, или как поменяли исходный код в Матрице

от автора

Привет, Хабр.

Как и все разработчики на php, я тоже иногда сталкивался с NodeJs .
На днях просмотривая фреймворки Node столкнулся на AdonisJs . И после нескольких минут прочтения кода я почувствовал себя как в матрице .
Прошла черная кошка, за ней другая, такая же.

А теперь немного про AdonisJs.

Когда дело доходит до разработки веб-приложений, есть десятки фреймворков на выбор. Менее известный, но очень любимый фреймворк — AdonisJs, известный своим красивым кодом и простотой для бэкэнда.

AdonisJs — это Node.js MVC для согласованного, стабильного и выразительного кода. Адонис заботится о многих трудоемких деталях разработки, предлагая стабильную экосистему для серверных веб-приложений.

Разработчики, использующие Laravel, отмечают, что AdonisJs предлагает тот же шаблон, дизайн, структуру кодирования и интерфейс на основе команд. AdonisJs легко изучить. В этой статье я хочу познакомить вас с фреймворком и показать, с чего начать.

Что такое AdonisJs?

AdonisJs — это фреймворк Node.js, основанный на Laravel. Он реализует аналогичные концепции внедрения зависимостей и поставщиков, красивый код и интуитивно понятный дизайн. AdonisJs был разработан, чтобы доставлять разработчикам радость и легкость в их работе, поэтому он пренебрегает последовательным и выразительным API для разработки полнофункциональных веб-приложений.

Эта среда MVC в стиле Laravel фокусируется на основных аспектах создания стабильного и масштабируемого веб-приложения, таких как:

  • Приятный опыт разработчика

  • Согласованный API

  • Скорость и производительность

  • Поддержка рассылки, аутентификации, проверки данных, Redis и т.д.

AdonisJs Плюсы и минусы

Давайте посмотрим на наиболее заметные плюсы и минусы AdonisJs.

  • Структура папок: AdonisJs предлагает удобную структуру папок, которая упрощает организацию.

  • Валидатор: AdonisJs предоставляет специальный провайдер валидации, который упрощает валидацию пользовательского ввода.

  • Lucid ORM: AdonisJs имеет первоклассную поддержку для таких баз данных, как MariaDB и MySQL.

  • ICO и поставщик услуг: AdonisJs предлагает простой способ управления зависимостями через IOC. Поставщики услуг могут управлять зависимостями жизненного цикла.

  • Безопасность: AdonisJs поставляется с инструментами для защиты веб-сайтов от распространенных веб-атак, таких как защита от межсайтовой подделки.

  • Тестирование: AdonisJS упрощает ручное тестирование, позволяя разработчикам писать функциональные модульные тесты для тестирования своих веб-приложений.

Минусы

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

  • Документация: документация для AdonisJs в настоящее время незавершена, что означает, что некоторые части неполны.

  • Плагины: для AdonisJs доступно меньше плагинов из-за его популярности и возраста.

  • Без «боевых испытаний»: поскольку на AdonisJs создается меньше крупномасштабных веб-сайтов, он не тестировался в боевых условиях по сравнению с другими фреймворками.

Структура папок AdonisJs

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

Напоминание: архитектура Model View Controller (MVC) состоит из трех частей:

  1. Модель: самый низкий уровень шаблона для хранения данных.

  2. Просмотр: это позволяет пользователю просматривать данные.

  3. Контроллер: программный код, управляющий моделью и представлением.

Давайте посмотрим на структуру папок AdonisJs и определим некоторые ключевые термины.

Приложение (app)

Папка приложения содержит логику приложения, в том числе:

  • Контроллеры: они контролируют поток логики. Контроллеры можно связывать вместе с маршрутами.

  • Промежуточное ПО: Промежуточное ПО содержит методы, которые должны выполняться до или после HTTP-запроса.

  • Модели: они определяют модели и отношения базы данных.

Внутри папки приложения можно создать больше папок, таких как Validators, Exceptions, Helpers и многое другое.

config

Здесь хранится конфигурация нашего приложения. Мы также можем создать здесь наш файл конфигурации.

database

Мы используем эту папку для хранения миграций, семян и фабрик.

public

Сюда мы помещаем наши статические файлы, такие как изображения, файлы CSS и JavaScript. Они будут вызываться напрямую через HTTP.

resources

Сюда мы помещаем шаблоны представлений и файлы шаблонов Edge.

start

Эти файлы используются для загрузки приложения. Здесь мы также можем создавать такие файлы, как Events, Redis и Hooks.

.env

Файл .env находится в корневой папке. Он будет содержать все переменные, связанные с нашей рабочей средой. У разработки и производства обычно разные настройки.

ace

Файл ace используется для выполнения команд, специфичных для проекта.

package.json

Это стандартный файл Node.js.

server.js

Этот файл загружает HTTP-сервер.

Создать базовое приложение

Теперь, когда мы знакомы с AdonisJs, давайте узнаем, как на самом деле создать наше первое приложение. Начать довольно просто.

Для этого мы должны загрузить AdonisJs с официального сайта или использовать пакетный менеджер от NodeJs npm или другое на ваш вкус.

Я придпочитаю установить с помощю npmnpm init adonis-ts-app@latest hello-world

Эта команда создает новое приложение AdonisJs с именем hello-world

Затем мы войдем каталог hello-world, чтобы запустить сервер (NodeJs).

cd blog node ace serve --watch

После мы получим примерно такой результат.

[ info ]  building project... [ info ]  starting http server... [ encore ] Running webpack-dev-server ... [ info ]  watching file system for changes {"level":30,"time":1644301994185,"pid":916,"hostname":"DESKTOP-D07T268","name":"hello-world","msg":"started serve r on localhost.loc:3333"} ╭─────────────────────────────────────────────────────────╮ │                                                         │ │    Server address: http://localhost.loc:3333            │ │    Watching filesystem for changes: YES                 │ │    Encore server address: http://localhost:61073        │ │                                                         │ ╰─────────────────────────────────────────────────────────╯ UPDATE: public\assets\manifest.json UPDATE: public\assets\entrypoints.json [ encore ]  DONE  Compiled successfully in 1452ms10:33:17 AM [ encore ] webpack compiled successfully 

Создание маршрутов

Для создания маршрутов мы войдем в папку start и откроем файл routes.ts

Этот файл определяет шаблоны URL-адресов, к которым пользователи могут обращаться в качестве точек входа в веб-приложение. Когда пользователь запрашивает URL-адрес, Адонис находит шаблон URL-адреса внутри start/routes.ts, поэтому, если шаблон совпадает, Адонис обрабатывает логику внутри этого маршрута.

Мы можем связывать маршруты с контроллерами в качестве логических обработчиков и присоединять маршруты к промежуточному программному обеспечению и валидаторам.

AdonisJs предлагает маршрут по умолчанию, который отображает welcome.edge представление. Чтобы начать с нуля, мы должны сначала удалить это. Ниже мы реализуем код, который регистрирует 2 разных маршрута для домашней страницы и страницы контактов.

import Route from '@ioc:Adonis/Core/Route'  Route.get('/', 'HomeController.home'); Route.get('contacts', 'ContactController.index')

Обратите внимание что маршруты создаются с помощю модуля Route, который заложен ядро Adonis.

Теперь когда мы создали маршруты. Нам надо создать контроллеры для этих маршрутов.

Для этого давайте используем стандартную команду AdonisJs

node ace make:controller home

После запуска этой команды он создаст стандартный контроллер в папке app/controllers/Http с названием HomeController.ts
Далее довайте создадим метод home что бы он обработал наш главный маршрут.

export default class HomeController {   home({ view }){     return view.render(`home`)   } }

Теперь когда у нас есть маршрут и обработчик, самое время создать предстовление (view), для данного маршрута. И опять давайте воспользуемся командой ace .

node ace make:view home

После запуска команды она создаст для нас представление с названием home.edge в папке resources/views .
Далее давайте создадим простую главную страницу. Открываем наш home.edge файл и пишем.

<!DOCTYPE html> <html> <head>     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"> </head> <body> <div class="container">     <div class="header clearfix">         <nav>             <ul class="nav nav-pills pull-xs-right">                 <li class="nav-item"><a href="/" class="nav-link">Home</a></li>                 <li class="nav-item"><a href="/contact" class="nav-link">Contact</a></li>             </ul>         </nav>     </div>     <section>         <h1 class="text-muted"> Home Page </h1>     </section>  </div> </body> </html>

Здесь пока что все стандартно. Я специально не затронул фишки шаблонизатора edge что бы статья не длилась долго. Скажу что оно как и вся структура AdonisJs интуитивно понятно. А те кто работал с Laravel blade будут чувствовать себя как дома.

Ну и после этого давайте откроем нашу главную страницу. (http://localhost.loc:3333/).

Как видно буквально за несколько минут мы уже создали рабочее приложение, которое можно разширить как вам угодно.

Я не буду делать то же самые действия для нашей второй страницы (contact) . Это оставлю вам. Для него надо делать аналогичные простые действия как и для главной страницы.

И в конце давайте приведем несколько примеров аналогичности нашей любимой Laravel и AdonisJs.

Команды

Laravel make

make   make:command         Create a new Artisan command   make:controller      Create a new controller class   make:exception       Create a new custom exception class   make:migration       Create a new migration file   make:model           Create a new Eloquent model class   make:provider        Create a new service provider class   make:seeder          Create a new seeder class

AdonisJs make

make   make:command         Make a new ace command   make:controller      Make a new HTTP or Websocket channel controller   make:exception       Make a new exception   make:migration       Create a new migration file   make:model           Make a new lucid model   make:provider        Make a new provider   make:seed            Create a database seeder

Laravel Routing

Route::get('/', function () {     return 'Hello World'; });   Route::get('/user', 'UserController@index');

Adonis Routing

Route.get('/', () => 'Hello World')   Route.get('user', 'UserController.index')

Laravel Migrations

public function up() {   Schema::create('airlines', function (Blueprint $table) {     $table->increments();     $table->string('airline');     $table->timestamps();   });     Schema::table('users', function (Blueprint $table) {     $table->string('email');   }); } public function down() {   Schema::table('users', function (Blueprint $table) {   $table->dropColumn('email');   });    Schema::drop('airlines'); }

Adonis Migrations

up () {   this.create('airlines', (table) => {     table.increments()     table.string('airline')     table.timestamps()   });     this.alter('users', (table) => {     table.string('email')   }) } down () {   this.alter('users', (table) => {     table.dropColumn('email')   })     this.drop('airlines') }

Все кто хочет изучить NodeJs и фреймворки, советую не пройти мимо этого прекрасного фреймворка AdonisJs.

На этом наверное закончим. Спасибо что прочитали до конца.


ссылка на оригинал статьи https://habr.com/ru/articles/650341/