Creación de una aplicación de Angular con la API para MongoDB de Azure Cosmos DB: uso de Mongoose para conectarse a Azure Cosmos DB
SE APLICA A: MongoDB
En este tutorial de varias partes se muestra cómo crear una aplicación Node.js con Express y Angular y conectarla a la cuenta de Azure Cosmos DB configurada con la API para MongoDB de Azure Cosmos DB. En este artículo se describe la parte 5 del tutorial, que se basa en la parte 4.
En esta parte del tutorial, va a realizar lo siguiente:
- Usar Mongoose para conectarse a Azure Cosmos DB.
- Obtener la cadena de conexión de Azure Cosmos DB.
- Crear el modelo de Hero.
- Crear servicio Hero para obtener datos de Hero.
- Ejecute localmente la aplicación.
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Requisitos previos
Antes de empezar este tutorial, complete los pasos de la parte 4.
Este tutorial requiere que se ejecute localmente la CLI de Azure. Debe tener instalada la CLI de Azure versión 2.0 o posterior. Ejecute
az --version
para encontrar la versión. Si tiene que instalar o actualizar la CLI de Azure, consulte Instalación de la CLI de Azure.Este tutorial le guía paso a paso por el procedimiento necesario para compilar la aplicación. Si desea descargar el proyecto finalizado, puede obtener la aplicación completa en el repositorio de angular-cosmosdb en GitHub.
Uso de Mongoose para conectarse
Mongoose es una biblioteca de modelado de datos de objeto (ODM) para MongoDB y Node.js. Puede utilizar Mongoose para conectarse a la cuenta de Azure Cosmos DB. Siga estos pasos para instalar Mongoose y conectarse a Azure Cosmos DB:
Instale el módulo mongoose npm, que es una API que permite comunicarse con MongoDB.
npm install mongoose@5.13.15 --save
Importante
Azure Cosmos DB for MongoDB es compatible con versiones de Mongoose, hasta la versión
5.13.15
. Para más información, consulte la explicación del problema en el repositorio de GitHub de Mongoose.En la carpeta server, cree un archivo denominado mongo.js. Va a agregar los detalles de conexión de la cuenta de Azure Cosmos DB a este archivo.
Copie el código siguiente en el archivo mongo.js. Este código proporciona la funcionalidad siguiente:
Requiere Mongoose.
Invalida la promesa de Mongo para utilizar la promesa básica que se integra en ES6/ES2015 y versiones posteriores.
Llama a un archivo env que le permite configurar ciertos elementos en función de si se encuentra en fase de ensayo, producción o desarrollo. Creará ese archivo en la siguiente sección.
Incluye la cadena de conexión de MongoDB, que se establece en el archivo env.
Crea una función de conexión que llama a Mongoose.
const mongoose = require('mongoose'); /** * Set to Node.js native promises * Per https://mongoosejs.com/docs/promises.html */ mongoose.Promise = global.Promise; const env = require('./env/environment'); // eslint-disable-next-line max-len const mongoUri = `mongodb://${env.accountName}:${env.key}@${env.accountName}.documents.azure.com:${env.port}/${env.databaseName}?ssl=true`; function connect() { mongoose.set('debug', true); return mongoose.connect(mongoUri, { useMongoClient: true }); } module.exports = { connect, mongoose };
En el panel Explorador, en server, cree una carpeta denominada entorno. En la carpeta environment, cree un archivo denominado environment.js.
En el archivo mongo.js, hay que incluir valores para los parámetros
dbName
,key
ycosmosPort
. Copie el código siguiente en el archivo environment.js:// TODO: replace if yours are different module.exports = { accountName: 'your-cosmosdb-account-name-goes-here', databaseName: 'admin', key: 'your-key-goes-here', port: 10255 };
Obtención de la cadena de conexión
Para conectar la aplicación a Azure Cosmos DB, tiene que actualizar las opciones de configuración de la aplicación. Siga estos pasos para actualizar la configuración:
En Azure Portal, obtenga el número de puerto, nombre de la cuenta de Azure Cosmos DB y los valores de clave principal de la cuenta de Azure Cosmos DB.
En el archivo environment.js, cambie el valor de
port
a 10255.const port = 10255;
En el archivo environment.js, cambie el valor de
accountName
por el nombre de la cuenta de Azure Cosmos DB que creó en la parte 4 del tutorial.Recupere la clave principal de la cuenta de Azure Cosmos DB mediante el siguiente comando de la CLI en la ventana del terminal:
az cosmosdb keys list --name <cosmosdb-name> -g myResourceGroup
<cosmosdb-name> es el nombre de la cuenta de Azure Cosmos DB que creó en la parte 4 del tutorial.
Copie la clave principal en el archivo environment.js como valor de
key
.
La aplicación tiene ahora toda la información necesaria para conectarse a Azure Cosmos DB.
Creación de un modelo de Hero
Luego tiene que definir el esquema de los datos que se van a almacenar en Azure Cosmos DB definiendo un archivo de modelo. Siga estos pasos para crear un modelo de Hero que define el esquema de los datos:
En el panel Explorador, cree un archivo denominado hero.model.js en la carpeta server.
Copie el código siguiente en el archivo hero.model.js. Este código proporciona la funcionalidad siguiente:
- Requiere Mongoose.
- Crea un nuevo esquema con un identificador, un nombre y un mensaje.
- Crea un modelo con el esquema.
- Exporta el modelo.
- Asigne a la colección el nombre Heroes (en lugar de Heros, que es el nombre predeterminado de la colección según las reglas de nomenclatura de plurales de Mongoose).
const mongoose = require('mongoose'); const Schema = mongoose.Schema; const heroSchema = new Schema( { id: { type: Number, required: true, unique: true }, name: String, saying: String }, { collection: 'Heroes' } ); const Hero = mongoose.model('Hero', heroSchema); module.exports = Hero;
Creación de un servicio Hero
Cuando haya creado el modelo de Hero, tendrá que definir un servicio para leer los datos y realizar operaciones de lista, creación, eliminación y actualización. Siga estos pasos para crear un servicio Hero que consulta los datos de Azure Cosmos DB:
En el panel Explorador, cree un archivo denominado hero.service.js en la carpeta server.
Copie el código siguiente en el archivo hero.service.js. Este código proporciona la funcionalidad siguiente:
- Obtiene el modelo que se ha creado.
- Se conecta a la base de datos.
- Se crea una variable
docquery
que utiliza el métodohero.find
para definir una consulta que devuelve todos los héroes. - Se ejecuta una consulta con la función
docquery.exec
y una promesa para obtener una lista de todos los héroes, en la que el estado de respuesta es 200. - Si el estado es 500, devuelve el mensaje de error.
- Dado que usamos módulos, se obtiene los héroes.
const Hero = require('./hero.model'); require('./mongo').connect(); function getHeroes() { const docquery = Hero.find({}); docquery .exec() .then(heroes => { res.status(200).json(heroes); }) .catch(error => { res.status(500).send(error); return; }); } module.exports = { getHeroes };
Configuración de rutas
Luego tiene que configurar rutas para controlar las direcciones URL para la obtención, creación, lectura y eliminación de solicitudes. Los métodos de enrutamiento especifican funciones de devolución de llamada (también denominadas funciones de controlador). Estas funciones se llaman cuando la aplicación recibe una solicitud para el punto de conexión especificado y el método HTTP. Siga estos pasos para agregar el servicio Hero y definir las rutas:
En Visual Studio Code, en el archivo routes.js, convierta en comentario la función
res.send
que envía los datos de ejemplo de Hero. Agregue una línea para llamar a la funciónheroService.getHeroes
en su lugar.router.get('/heroes', (req, res) => { heroService.getHeroes(req, res); // res.send(200, [ // {"id": 10, "name": "Starlord", "saying": "oh yeah"} // ]) });
En el archivo routes.js, use
require
para el servicio Hero:const heroService = require('./hero.service');
En el archivo hero.service.js, actualice la función
getHeroes
para tomar los parámetrosreq
yres
, tal y como se indica a continuación:function getHeroes(req, res) {
Dediquemos un minuto a revisar y repasar el código anterior. En primer lugar, entramos en el archivo index.js, que configura el servidor de nodo. Tenga en cuenta que también configura y define las rutas. El archivo routes.js se comunica entonces con el servicio Hero y le indica que obtenga las funciones, como getHeroes, y pase la solicitud y la respuesta. El archivo hero.service.js obtiene el modelo y se conecta a Mongo. Luego ejecuta getHeroes cuando se llama y devuelve una respuesta de 200.
Ejecución la aplicación
Siga luego estos pasos para ejecutar la aplicación:
En Visual Studio Code, guarde todos los cambios. A la izquierda, seleccione el botón Depurar
y, después, el botón Iniciar depuración
.
Ahora cambie al explorador. Abra las Herramientas de desarrollo y la pestaña Red. Vaya a
http://localhost:3000
y verá la aplicación.
No hay ningún héroe almacenado aún en la aplicación. En la siguiente parte de este tutorial, vamos a agregar funcionalidad de colocación, inserción y eliminación. Luego se pueden agregar, actualizar y eliminar a héroes desde la interfaz de usuario a través de conexiones de Mongoose a nuestra base de datos de Azure Cosmos DB.
Limpieza de recursos
Cuando ya no necesite los recursos, podrá eliminar el grupo de recursos, la cuenta de Azure Cosmos DB y todos los recursos relacionados. Siga estos pasos para eliminar el grupo de recursos:
- Vaya al grupo de recursos donde creó la cuenta de Azure Cosmos DB.
- Seleccione Eliminar grupo de recursos.
- Confirme el nombre del grupo de recursos que quiere eliminar y seleccione Eliminar.
Pasos siguientes
Continúe con la parte 6 del tutorial para agregar las funciones Post, Put y Delete a la aplicación:
¿Intenta planear la capacidad para una migración a Azure Cosmos DB? Para ello, puede usar información sobre el clúster de bases de datos existente.
- Si lo único que sabe es el número de núcleos virtuales y servidores del clúster de bases de datos existente, lea sobre el cálculo de unidades de solicitud mediante núcleos o CPU virtuales.
- Si conoce las tasas de solicitudes típicas de la carga de trabajo de la base de datos actual, obtenga información sobre el cálculo de unidades de solicitud mediante la herramienta de planeamiento de capacidad de Azure Cosmos DB.