Objeción.js | ORM compatible con SQL para Node.js

Node.js tiene muchos mapeadores relacionales de objetos (para bases de datos relacionales) que podemos elegir entre algunos de los más populares:

  1. Secuela
  2. Mangosta o prisma
  3. TipoORM
  4. Objection.js (Lea la documentación completa aquí )

¿Por qué considerar Objection.js?
Así que aquí hay algunas razones para considerar usarlo:

  • Manera fácil de definir modelos y relaciones entre ellos.
  • Cree consultas con async/await de Node.
  • Utilice la carga ansiosa y las transacciones con sus modelos.
  • Trabaje con documentos anidados en filas.
  • Potentes mecanismos para insertar y alterar gráficos de objetos.
  • Compatibilidad con TypeScript y validación de esquemas JSON.

Se deben seguir los siguientes pasos para instalar y usar Objection.js:

Entonces, la forma de instalarlo es instalar dos dependencias: knex y objeción usando el siguiente comando:

npm i knex -g --save
npm i objection --save

Knex es un potente generador de consultas SQL (se utiliza un montón de ORM diferentes). Entonces, bajo el capó, la objeción usa Knex. Además de generar consultas SQL, Knex se utiliza para establecer conexiones de base de datos y conexiones de agrupación. También se utiliza para administrar esquemas de bases de datos a través de migraciones. 

Es posible que también deba instalar un controlador de base de datos para cualquier base de datos SQL que desee usar. Algunas opciones disponibles, solo instálelas usando el siguiente comando:

npm i pg
npm i sqlite3
npm i mysql
npm i mariasql

Creación de una base de datos:
Nombre de archivo: app.js

const { Client } = require('pg');
const { db } = require('./config');
const client = new Client();
  
(async () => {
  await client.connect();
  await client.query(`CREATE DATABASE ${db.connection.database}`);
  await client.end();
})();

Creando Migraciones:

  • Las migraciones le permiten aplicar un cambio a un esquema de base de datos paso a paso.
  • La acción «arriba» aplica un cambio (crear una tabla, agregar/modificar una columna, etc.).
  • La acción «abajo» aplica la acción inversa del cambio (por ejemplo, si la acción «arriba» de una migración crea una tabla, su acción «abajo» equivalente eliminará la tabla).
  • Knex creará una carpeta de migración (a menos que ya exista).
  • Luego crea un archivo en la carpeta de migraciones para la migración.
knex migrate:make create_tasks_table

Las migraciones generadas se verán así:

Nombre de archivo: empty_migration.js

exports.up = function (knex, Promise) {
};
  
exports.down = function (knex, Promise) {
};

Ahora podemos realizar ciertas acciones como crear una tabla:
Nombre de archivo: knex_migration.js

const tableName = 'tasks';
  
exports.up = knex => {
  
  // Create the tasks table
  return knex.schema.createTable(tableName, table => {
    table.increments('id').primary();
    table.string('name');
    table.date('due_by');
    table.boolean('is_done').defaultTo(false);
    table.timestamps(true, true);
    table.unique(['name']);
  });
};
  
exports.down = knex => {
  
  // Drop the tasks table
  return knex.schema.dropTableIfExists(tableName);
};

Ahora, si desea ejecutarlos, el siguiente código lo ejecutará:

knex migrate:latest

Modelos:

  • Los modelos son los envoltorios de las tablas de la base de datos.
  • Ayudan a encapsular la lógica empresarial dentro de esas tablas (relaciones, validaciones, índices, disparadores).
  • Objection.js le permite crear modelos usando clases ES6.

A continuación se muestra un ejemplo realmente agradable y simple:
Nombre de archivo: TaskModel.js

// Task Model
const { MODEL } = require('objection');
const db = require('../db');
  
// Pass he knex connection to Objection
Model.knex(db);
  
class Task extends Model {
  
  // Tells objection what the db 
  // table is for the model
  static get tableName() {
    return 'tasks';
  }
}
  
module.exports = Task;

La estructura del proyecto se verá así:

  • Consulta de selección simple:
    nombre de archivo: select_query.sql
    SELECT * from tasks;

    Se puede hacer con:
    Nombre de archivo: objeción_select_query.js

    const tasks = await Task.query();
  • Consulta SELECT típica:
    Nombre de archivo: standard_select_query.sql
    SELECT * from tasks WHERE is_done = false ORDER BY due_by asc;

    Se puede hacer con:
    Nombre de archivo: objeción_estándar_select_query.js

    const tasks = await Task.query()
        .where({is_done: false}).orderBy('due_by');
  • Insertar consulta:
    Nombre de archivo: insert_query.sql
    INSERT INTO tasks (name) VALUES ('Setup Code Coverage');

    Se puede hacer con:
    Nombre de archivo:object_insert_query.js

    await Task.query().insert({ name: 'Setup Code Coverage' });
  • Consulta de actualización:
    Nombre de archivo: update_query.sql
    UPDATE tasks SET is_done = true WHERE id = 1;

    Se puede hacer con:
    Nombre de archivo:object_insert_query.js

    await Task.query().patch({ is_done: true }).where({ id: 1 });

Si usamos el archivoobject_standard_query.js para verificar la salida, la salida se verá así:

Entonces, las consultas de Objeción son realmente poderosas y fáciles de usar.

Publicación traducida automáticamente

Artículo escrito por sachinjangid y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *