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.
Para obtener más información y explorar la documentación completa, podéis visitar el repositorio oficial de Knex.js en GitHub.
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