javascript-orm-knex

Conectar con bases de datos con Node.js y Knex.js

Knex.js es un potente constructor de consultas SQL para Node.js que facilita la interacción con bases de datos relacionales.

Knex.js nos ayuda a trabajar con bases de datos de manera más eficiente y a mantener nuestro código más limpio y modular.

Ofrece una interfaz sencilla y flexible para construir consultas SQL, realizar migraciones, y gestionar nuestras bases de datos de manera eficiente. Knex.js es compatible con una amplia variedad de sistemas de gestión de bases de datos (incluyendo PostgreSQL, MySQL, SQLite3 y Oracle).

Entre sus principales características se incluyen:

  • Construcción de Consultas SQL: Permite construir consultas SQL complejas utilizando una interfaz de JavaScript fácil de usar.
  • Migraciones: Facilita la gestión de cambios en el esquema de la base de datos mediante migraciones.
  • Seeds: Permite insertar datos iniciales en la base de datos utilizando scripts de seeds.
  • Compatibilidad: Soporta varios sistemas de gestión de bases de datos, lo que nos permite cambiar de base de datos sin necesidad de reescribir nuestras consultas.

Cómo instalar Knex.js

Para comenzar a utilizar Knex.js, primero debemos tener Node.js y npm instalados en nuestro sistema. Una vez que tengamos estos requisitos, podemos instalar Knex.js y su cliente para la base de datos que deseamos utilizar.

Instalar Knex.js

Podemos agregar Knex.js a nuestro proyecto usando npm. Ejecutamos el siguiente comando en el directorio de nuestro proyecto:

npm install knex

Instalar el cliente de base de datos

Necesitamos instalar el cliente para la base de datos que vamos a utilizar. Por ejemplo, una de las siguientes,

# para PostgreSQL
npm install pg

# para MySQL
npm install mysql

# para SQLLite3
npm install sqlite3

Inicializar Knex

Inicializamos Knex en nuestro proyecto para crear un archivo de configuración. Ejecutamos el siguiente comando:

npx knex init

Esto creará un archivo knexfile.js en la raíz de nuestro proyecto, donde podemos definir la configuración para nuestras diferentes bases de datos.

Configuración

Primero, necesitamos configurar Knex.js en nuestro proyecto. Por ejemplo, podemos crear un archivo de configuración, por ejemplo, db.js, con la siguiente configuración básica:

const knex = require('knex');
const knexfile = require('./knexfile');

// Elegimos el entorno de configuración (por ejemplo, 'development')
const environment = process.env.NODE_ENV || 'development';
const config = knexfile[environment];

// Inicializamos Knex con la configuración
const db = knex(config);

module.exports = db;

Luego en el resto de scripts solo tendremos que importar este fichero para tener la configuración de la base de datos disponible.

Construcción de Consultas

Knex.js proporciona una interfaz de JavaScript para construir consultas SQL. Aquí hay algunos ejemplos de cómo usar Knex.js para realizar operaciones básicas:

Seleccionar datos

const db = require('./db');

db('users')
  .select('*')
  .where('age', '>', 18)
  .then(users => {
	console.log(users);
  })
  .catch(err => {
	console.error(err);
  });

Insertar datos

const db = require('./db');

db('users')
  .insert({ name: 'John Doe', age: 30 })
  .then(() => {
	console.log('User added');
  })
  .catch(err => {
	console.error(err);
  });

Actualizar datos

const db = require('./db');

db('users')
  .where('id', 1)
  .update({ age: 31 })
  .then(() => {
	console.log('User updated');
  })
  .catch(err => {
	console.error(err);
  });

Eliminar datos

const db = require('./db');

db('users')
  .where('id', 1)
  .del()
  .then(() => {
	console.log('User deleted');
  })
  .catch(err => {
	console.error(err);
  });

Migraciones

Knex.js facilita la gestión de cambios en el esquema de la base de datos mediante migraciones. Para crear una nueva migración, usamos:

npx knex migrate:make migration_name

Esto creará un archivo de migración en el directorio migrations. Editamos este archivo para definir los cambios en el esquema:

exports.up = function(knex) {
  return knex.schema.createTable('users', function(table) {
    table.increments('id');
    table.string('name');
    table.integer('age');
  });
};

exports.down = function(knex) {
  return knex.schema.dropTable('users');
};

Aplicamos la migración con:

npx knex migrate:latest

Seeds

Para insertar datos iniciales, podemos usar seeds. Creamos un nuevo archivo de seed con:

npx knex seed:make seed_name

Luego, definimos los datos en el archivo de seed:

exports.seed = function(knex) {
  // Deletes ALL existing entries
  return knex('users').del()
    .then(function () {
      // Inserts seed entries
      return knex('users').insert([
        { name: 'Alice', age: 25 },
        { name: 'Bob', age: 30 }
      ]);
    });
};

Ejecutamos el seed con:

npx knex seed:run