AdonisJS es un framework de desarrollo web para Node.js que nos proporciona una estructura sólida y herramientas integradas para construir aplicaciones web robustas y escalables.
Está fuertemente inspirado por otros frameworks MVC, como Laravel en el mundo de PHP. AdonisJS está diseñado para simplificar el desarrollo de aplicaciones al ofrecer una arquitectura coherente y herramientas listas para usar.
AdonisJS se enfoca en mejorar nuestra productividad y mantener nuestro código organizado. Proporciona un conjunto completo de herramientas que incluye un ORM (Object-Relational Mapper), un sistema de enrutamiento, y una capa de middleware, entre otros.
Algunas de las características Principales de AdonisJS,
- Arquitectura MVC: AdonisJS sigue el patrón de diseño Model-View-Controller (MVC), que facilita la separación de la lógica de negocios, la presentación y el acceso a datos.
- ORM Integrado: El ORM llamado Lucid nos ayuda a interactuar con bases de datos de manera sencilla, permitiéndonos trabajar con modelos de datos sin tener que escribir consultas SQL manualmente.
- Sistema de Rutas: Su sistema de enrutamiento permite definir rutas de manera intuitiva y manejar las solicitudes HTTP de forma eficiente.
- Middleware: Nos permite implementar funciones que se ejecutan antes o después de manejar las solicitudes HTTP, útil para tareas como la autenticación y la validación.
- CLI (Interfaz de Línea de Comandos): AdonisJS incluye una CLI robusta para generar componentes, manejar migraciones y realizar otras tareas comunes de desarrollo.
Estas características nos permiten manejar tareas comunes de desarrollo web sin tener que configurar todo desde cero.
Para obtener más información sobre AdonisJS, podéis consultar la documentación oficial de AdonisJS y explorar el repositorio en GitHub para acceder al código fuente y a ejemplos adicionales.
Instalación de AdonisJS
Para comenzar a trabajar con AdonisJS, primero debemos instalarlo. Usamos npm
o yarn
para crear un proyecto de AdonisJS.
npm init adonisjs@latest my-project
Este comando genera una estructura de proyecto base con todas las configuraciones necesarias. A continuación, accedemos al directorio del proyecto y ejecutamos el servidor:
cd my-project
npm run dev
Si todo funciona veréis un “It Works!” en la pantalla (sí, no se han matado más, podía haber puesto un logo o algo pero ¡no!. It Works)
Estructura del proyecto
Una vez que se crea un nuevo proyecto, AdonisJS proporciona una estructura de directorios y archivos predeterminados para organizar el código de la aplicación. La estructura de archivos incluye los siguientes directorios y archivos:
app
: Este directorio contiene la lógica de la aplicación, incluidos los controladores, las vistas y los modelos.config
: Este directorio contiene los archivos de configuración de la aplicación.database
: Este directorio contiene las migraciones de la base de datos y los archivos de semillas.public
: Este directorio contiene los archivos públicos como CSS, JS y archivos de imagen.resources
: Este directorio contiene los archivos fuente de la aplicación, como las vistas y los archivos de estilo.routes
: Este directorio contiene los archivos de enrutamiento de la aplicación..env
: Este archivo contiene variables de entorno para la aplicación.
Cómo usar AdonisJS
Veamos cómo empezar a construir una aplicación simple con AdonisJS. Crearemos una pequeña aplicación de blog con rutas, controladores y modelos básicos.
Definir rutas
En AdonisJS, las rutas se definen en el archivo start/routes.js
. Aquí es donde podemos especificar cómo se deben manejar las solicitudes HTTP.
import router from '@adonisjs/core/services/router'
router.on('/').render('pages/home')
router.get('/hello-world', () => {
return 'Hello world from the home page.'
})
router.get('/posts/:id', ({ params }) => {
return `This is post with id ${params.id}`
})
Crear controladores
Los controladores manejan la lógica de la aplicación para cada ruta. Podemos crear un controlador utilizando la CLI de AdonisJS:
node ace make:controller PostController
El archivo generado se encuentra en app/Controllers/Http/PostController.js
y podemos definir los métodos para manejar nuestras rutas:
import type { HttpContext } from '@adonisjs/core/http'
export default class UsersController {
async index(ctx: HttpContext) {
return [
{
id: ctx.params.id,
username: 'virk',
},
{
id: 2,
username: 'romain',
},
]
}
async create({}: HttpContext) {}
async store({ request }: HttpContext) {}
async show({ params }: HttpContext) {}
async edit({ params }: HttpContext) {}
async update({ params, request }: HttpContext) {}
async destroy({ params }: HttpContext) {}
}
Ahora podemos cambiar el router para que use nuestro controller
router.get('/posts/:id', (ctx) => {
return new UsersController().index(ctx)
})
Crear modelos
Los modelos en AdonisJS representan tablas en la base de datos y nos permiten interactuar con los datos. Utilizamos la CLI para generar un modelo:
npm ace make:model Post
El archivo generado se encuentra en app/Models/Post.js
y define el esquema del modelo:
import { DateTime } from 'luxon'
import { BaseModel, column } from '@adonisjs/lucid/orm'
export default class Post extends BaseModel {
@column({ isPrimary: true })
declare id: number
@column.dateTime({ autoCreate: true })
declare createdAt: DateTime
@column.dateTime({ autoCreate: true, autoUpdate: true })
declare updatedAt: DateTime
}
Para crear las tablas en la base de datos, usamos migraciones. Primero, generamos una migración:
node ace make:migration posts
Luego, definimos el esquema en el archivo de migración generado en database/migrations/
:
import { BaseSchema } from '@adonisjs/lucid/schema'
export default class extends BaseSchema {
protected tableName = 'posts'
async up() {
this.schema.createTable(this.tableName, (table) => {
table.increments('id')
table.timestamp('created_at')
table.timestamp('updated_at')
})
}
async down() {
this.schema.dropTable(this.tableName)
}
}
Finalmente, ejecutamos la migración para crear la tabla:
node ace migration:run