notifications Notificaciones

Marcar todas como leídas

Ver más

lightbulb_outline

Cómo integrar FaunaDB en NodeJS

timer 6 Min.

remove_red_eye 261

calendar_today

FaunaDB es una popular solución de bases de datos serverless. Una base de datos que no instalas, ni configuras, ni administras, y que puedes comenzar a usar directamente con tu código.

Por qué usar FaunaDB

FaunaDB ofrece mútliples beneficios desde el primer momento en que usas el servicio, desde transacciones confiables a la base de datos, autenticación, escalamiento automático, consistencia de datos, baja latencia de acceso, entre otros.

Además, puedes comenzar a guardar datos tan pronto creas una cuenta y registras una nueva base de datos. Sin proceso de configuración o instalación.

Prepara tu cuenta de FaunaDB

Luego de que crees una cuenta en FaunaDB, crearás una base de datos desde el dashboard de tu cuenta de Fauna, aquí, el nombre de la base de datos es arbitrario, puedes usar el que quieras.

Captura de pantalla del formulario para crear bases de datos en FaunaDB

Esto te dirigirá a la vista de tu base de datos donde puedes administrar tu información, tus colecciones, indexes, entre otros. Continúa creando una nueva colección haciendo clic en la opción New Collection, o dirígete a la URL con el siguiente formato https://dashboard.fauna.com/db/nombre-base-datos, asegúrate de sustituir la parte que dice nombre-base-datos por el valor correspondiente al nombre de tu base de datos.

Captura de pantalla del botón New collection para agregar una nueva colección

Al crear una colección, asegúrate de que la opción Create collection index esté activa.

Por último, agregar una llave de acceso para tu nueva base de datos en la siguiente URL: https://dashboard.fauna.com/keys-new/@db/nombre-base-datos, asegúrate de sustituir la parte que dice nombre-base-datos por el valor correspondiente al nombre de tu base de datos.

Configurar el proyecto de Node

Para este ejemplo usaremos express como manejador de peticiones HTTP y el cliente de FaunaDB para NodeJS. Instálalos en tu proyecto con el siguiente comando:

npm install express faunadb --save

Autosaved: 11:35 am313910:0 FaunaDB es una popular solución de bases de datos serverless. Una base de datos que no instalas, ni configuras, ni administras, y que puedes comenzar a usar directamente con tu código.

Por qué usar FaunaDB

FaunaDB ofrece mútliples beneficios desde el primer momento en que usas el servicio, desde transacciones confiables a la base de datos, autenticación, escalamiento automático, consistencia de datos, baja latencia de acceso, entre otros.

Además, puedes comenzar a guardar datos tan pronto creas una cuenta y registras una nueva base de datos. Sin proceso de configuración o instalación.

Prepara tu cuenta de FaunaDB

Luego de que crees una cuenta en FaunaDB, crearás una base de datos desde el dashboard de tu cuenta de Fauna, aquí, el nombre de la base de datos es arbitrario, puedes usar el que quieras.

Captura de pantalla del formulario para crear bases de datos en FaunaDB

Esto te dirigirá a la vista de tu base de datos donde puedes administrar tu información, tus colecciones, indexes, entre otros. Continúa creando una nueva colección haciendo clic en la opción New Collection, o dirígete a la URL con el siguiente formato https://dashboard.fauna.com/db/nombre-base-datos, asegúrate de sustituir la parte que dice nombre-base-datos por el valor correspondiente al nombre de tu base de datos.

Captura de pantalla del botón New collection para agregar una nueva colección

Al crear una colección, asegúrate de que la opción Create collection index esté activa.

Por último, agregar una llave de acceso para tu nueva base de datos en la siguiente URL: https://dashboard.fauna.com/keys-new/@db/nombre-base-datos, asegúrate de sustituir la parte que dice nombre-base-datos por el valor correspondiente al nombre de tu base de datos.

Configurar el proyecto de Node

Para este ejemplo usaremos express como manejador de peticiones HTTP y el cliente de FaunaDB para NodeJS. Instálalos en tu proyecto con el siguiente comando:

npm install express faunadb --save

En el archivo de ejecución de tu servidor, agrega los endpoints para recibir las peticiones que eventualmente crearán y consultarán registros de FaunaDB:

const express = require('express');

const app = express(); // 
app.use(express.json()); // Permite recibir peticiones POST con JSON

app.get("/videos",async (req,res)=>{
  /* Aquí consultaremos datos */
});

app.post("/videos",async (req,res)=>{  
  /* Aquí crearemos datos */
})

app.listen(8080,()=> console.log("Server started")); //Iniciar el servidor en el puerto 8080

Configurar FaunaDB en Node

Para poder usar FaunaDB en tu script de Node necesitas:

  1. El cliente para Node de FaunaDB (previamente instalado)
  2. Tu SECRET KEY para configurar el cliente

En este ejemplo colocaremos la SECRET KEY en el código, pero te recomendamos usar una utilidad como dotenv para manejar esta clase de secretos, sin involucrarlos en tu código.

Procede a configurar el cliente de FaunaDB importa la librería faunadb y luego crea un nuevo objeto de la clase Client:

const fauna = require('faunadb'); // Importamos la librería

const client = new fauna.Client({
  secret: FAUNA_KEY
});

Guardar datos

A través de este nuevo objeto instancia de la clase Cliente puedes ejecutar consultas a la base de datos. Las consultas las debes construir con el objeto query de Fauna. Por ejemplo, la siguiente consulta crearía un nuevo registro en una colección vídeos:

fauna.query.Create(fauna.query.Collection('videos'),{
    data: { title: 'Introducción a Fauna', duracion: '5mins' }
})

💡 En Fauna, no es necesario que especifiques la base de datos que estás utilizando, basta con que especifiques la colección y FaunaDB buscará la base de datos apropiada, si varias bases de datos tienen la misma colección usarán el valor de prioridad que asignaste al crear la base de datos.

Puedes integrar la consulta anterior con tu manejador de express para crear registros en la base de datos con el JSON que recibas del cliente:

app.post("/courses",async (req,res)=>{
  const q = fauna.query.Create(fauna.query.Collection('videos'),{
    data: req.body // Guardamos lo que recibimos de la petición
  })
  try{
    const r = await client.query(q); //Ejecutamos la consulta
    res.json(r);
  }catch(err){
        /* En caso de que haya algún error lo enviamos */
    res.json(err.requestResult.responseContent.errors).status(500);
  }
})

Puedes usar Postman para probar si tu código está guardando los datos apropiadamente en la base de datos de FaunaDB:

Screenshot de la interfaz de Postman con una petición a localhost:8080/videos y un JSON con datos del video

Consultar datos

Para obtener todos los datos guardados en tu colección de FaunaDB, tienes que consultar los indexes a través del helper Match de tu colección a través del helper de paginación que FaunaDB ofrece:

const q = fauna.query.Paginate(fauna.query.Match(fauna.query.Ref('indexes/all_videos')));
const response = client.query(q); //Retorna una promesa

Por defecto el nombre del index creado automáticamente para tu colección es all_ y el nombre de tu colección, como all_videos.

Esta operación devolverá una promesa con todas las referencias a tus documentos en la colección videos. Para poder obtener los datos para cada una de estas referencias, deberás iterar el arreglo data de la respuesta y obtener el documento con la referencia que obtuvimos de la operación previa:

const q = fauna.query.Paginate(fauna.query.Match(fauna.query.Ref('indexes/all_videos')));
const response = await client.query(q); //Retorna una promesa
const refs = response.data; //Referencias a los documentos

const videosQuery = refs.map( (ref)=> fauna.query.Get(ref) ) //Un nuevo arreglo con la consulta para obtener todos los documentos

const videos = (await client.query(videosQuery)) //Obtenemos todos los documentos

Esta operación devolverá una estructura como esta, con un arreglo de objetos que contienen una propiedad data con la información que guardaste en la consulta de creación:

{
        "ref": {
            "@ref": {
                "id": "246855267366470158",
                "collection": {
                    "@ref": {
                        "id": "videos",
                        "collection": {
                            "@ref": {
                                "id": "videos"
                            }
                        }
                    }
                }
            }
        },
        "ts": 1571678378360000,
        "data": {
            "title": "Qué es serverless",
            "duration": "8mins"
        }
    }
]       

Y así es como obtienes la información que guardaste en FaunaDB.

Recursos adicionales

Otros artículos del blog

Comunidad