Bookshelf.js: Un ORM para Node.js que vale la pena

Bookshelf.js soporta bases de datos relacionales y su diseño es inspirado en Backbone.js, algo que me trae muy buenos recuerdos y que muchos ya no sabrán lo que era. Aún así, su uso es similar a él desde sus funciones, herencias y modelos.


Instalación y configuración

Bookshelf.js usa knex, un librería que construye consultas SQL, así que instalamos.

$ npm install knex@0.13 --save

Procedemos a instalar bookshelf.js

$ npm install bookshelf --save

La documentación nos da una lista de los manejadores de bases de datos disponibles los cuales soporta. Sólo instala la que uses.

$ npm install pg
$ npm install mysql
$ npm install mariasql
$ npm install sqlite3

Y para usarlo simplemente le pasamos la configuración. Para éste ejemplo usaré sqlite.

var knex = require('knex')({
  client: 'sqlite3',
  connection: {
    filename: "./mydb.sqlite"
  }
});

¿Cómo usarlo?

Crea una base de datos, aquí te dejo la consulta (para sqlite) para que la pruebes de manera rápida.

CREATE TABLE "users" (
	"id"	INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
	"username"	TEXT
)

Lo que Bookshelf espera es la instancia de knex para inicializarse.

var bookshelf = require('bookshelf')(knex);

Ahora le decimos a Bookshelf cuál será nuestra tabla usuarios. Creamos nuestro primer registro de usuario, así que lo instanciamos. Esto no se guardará, tenemos que llamar su método save para que quede guardado en la base de datos.

var User = bookshelf.Model.extend({
  tableName: 'users'
});

var user1 = new User({username: 'alex'});
user.save();

Por último, para ver los usuarios disponibles en nuestra base de datos, tienes que instanciar una colección de usuarios partiendo del modelo usuario. Si estás familiarizado con backbone.js, te será más fácil entenderlo, pero no te preocupes, se aprende rápido.

var Users = bookshelf.Collection.extend({
  model: User
});

var users = new Users();

users.fetch().then(function(models){
    console.log(models.toJSON());
});


Conclusión

Hasta ahora entendimos como configurar Bookshelf.js y su funcionamiento, pero aún tiene más por ofrecer. Relaciones, migraciones y plugins. Así que ésto apenas es un comienzo. Eso será en los siguientes post.

Hasta la próxima. Bendiciones!