RethinkDB es un motor de base de datos por lo que necesitamos conectarlo a nuestro backend. En este artículo aprenderemos cómo conectar NodeJS con RethinkDB, un stack interesante para aplicaciones modernas. El primer paso es instalar y levantar un servidor de RethinkDB, si usas Windows no te preocupes, tenemos un artículo que te explica como hacerlo. Una vez tengamos el servidor corriendo, vamos a la carpeta de nuestro proyecto e instalamos el cliente de RethinkDB para NodeJS.
npm install rethinkdb
Ahora creamos un archivo que en este ejemplo llamaremos nodeServer.js, pero tu puedes llamarlo como prefieras, allí guardaremos el código que queremos ejecutar en NodeJS. Lo primero que tenemos que hacer es importar RethinkDB como una dependencia, se recomienda asignarlo a una variable de esta forma:
var r = require(‘rethinkdb’);
Lo siguiente es hacer una conexión con nuestra base de datos, para esto usamos los siguientes parámetros, de los cuales el host y el puerto son obligatorios:
Recomendamos guardar estos parámetros en JSON, para facilitar su manejo lo guardaremos en un archivo como este:
{
"rethinkdb": {
"host": "192.168.1.6",
"port": 28015,
"authKey": "",
"db": "test"
}
}
Hacer una conexión entre NodeJS y RethinkDB es relativamente fácil, el código a continuación nos muestra cómo establecer una conexión:
var config = require('./config.json');
var r = require('rethinkdb');
r.connect(config.rethinkdb)
.then(function(conn) {
console.log(conn);
})
.error(function(error){
console.log(error.message);
});
Si ejecutamos el código anterior en NodeJS, en la consola se mostrarán los detalles de la conexión, en esta imagen puedes ver algunos de los que se muestran: Para poder generar una API RESTful con esa conexión, vamos a usar un framework de NodeJS llamado Express, así que empecemos por instalarlo desde nuestra consola.
npm install express
Para armar nuestra API, empecemos importando las configuraciones y cargando las dependencias en nodeserver.js.
var config = require('./config.json');
var express = require('express');
var serveStatic = require('serve-static');
var bodyParser = require('body-parser');
var multer = require('multer')
var r = require('rethinkdb');
Para este proyecto vamos a usar las siguientes dependencias, te invitamos a revisar su documentación:
Para empezar necesitamos revisar que la base de datos está lista e iniciar los elementos en la base de datos en caso de que estos falten, seguimos los siguientes pasos:
Empecemos por iniciar variables para guardar el nombre de la tabla y otra para el index que vamos a usar en RethinkDB
var table = 'list';
var tableIndex = 'createdAt';
Ahora creemos una función a la que vamos a llamar para iniciar Express y su configuración la vamos a guardar en config.json.
{
"rethinkdb": {
"host": "192.168.1.6",
"port": 28015,
"authKey": "",
"db": "test"
},
"express": {
"port": 80
}
}
var startExpress = function(){
app.listen(config.express.port);
}
Lo siguiente que vamos a hacer es definir la función que se va a encargar de inicializar la base de datos y Express.
var initialize = function(conn) {
r.table(table).indexWait('createdAt').run(conn)
.then(startExpress())
.error(function(error){
r.tableCreate(table).run(conn)
.finally(function(){
r.table(table).indexCreate(tableIndex).run(conn)
.finally(startExpress());
});
});
};
Es importante señalar que estamos usando promesas, por lo que es indispensable notar lo siguiente:
Ahora es momento de conectarnos a nuestra base de datos, una vez realizada la conexión con RethinkDB, debemos asegurarnos de que la base de datos exista y crearla, de ser necesario, antes de inicializar.
r.connect(config.rethinkdb)
.then(function(conn) {
r.dbList().run(conn)
.then(function(dbList){
if (dbList.indexOf(config.rethinkdb.db) > -1)
{
initialize(conn);
} else {
r.dbCreate(config.rethinkdb.db).run(conn)
.then(initialize(conn))
}
})
})
.error(function(error){
console.log(err.message);
process.exit(1);
});
En la siguiente parte del tutorial veremos como agregar los endpoints de nuestra API con Express.