3USD tu primer mes de Premium 馃槺 Canjear promo No me interesa

notifications Notificaciones

Marcar todas como le铆das

Ver m谩s

lightbulb_outline

C贸mo integrar FaunaDB en NodeJS

timer 6 Min.

remove_red_eye 889

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