Tutorial - API-MERN - 1a Parte
Tutorial - API-MERN - 1a Parte
Ahora abrimos la carpeta en Visual Studio Code, abrimos una nueva terminal usando el comando
Ctrl + ñ, y allí digitamos npm init
El proceso solicita algunos datos, diligencie hasta cuando el asistente le muestra el resumen,
entonces digite y, y listo se crea el archivo package.json, con la siguiente configuración:
Ahora instalamos el framework express que nos permite levantar/iniciar un servidor web, para
esto abrimos la terminal y allí digitamos: npm install express,
Y creamos la carpeta src y dentro de ella el archivo index.js, ahora nuestro proyecto luce así:
Y el atributo "start": "nodemon src/index.js", para indicarle que ahora se ejecuta sobre nodemon y
que el archivo de arranque está ubicado dentro de la carpeta src y se llama index.js
Entonces ejecutamos el servicio usando el comando npm run start, y la terminal se debería ver asi:
Para este propósito lo que vamos a hacer será instalar el paquete mongoose, y para esto usaremos
el comando npm i mongoose en la consola/terminal:
Para conectarse a la BdD debemos usar el método connect de mongoose, y este recibe como
parámetro la cadena de conexión para la BdD, está la podemos obtener en el servidor de mongo
Atlas en el botón connect, la siguiente es un ejemplo de la cadena obtenida:
mongodb+srv://usuario:[email protected]/?
retryWrites=true&w=majority
Pero esta cadena es la llave para ingresar y gestionar la bdd, es lógico que no queremos que
usuarios no autorizados ingresen hasta allí, para dar un nivel de seguridad a nuestra BdD vamos a
ocultar esta cadena dentro de un archivo con extensión .env, al cual los usuarios normales no van
a tener acceso directo.
2 – Crear en la raíz del proyecto el archivo con nombre .env, y allí dentro vamos a crear la
constante de ambiente así:
Pero este método puede retornar respuestas tanto positivas como errores, en todo caso vamos a
administrarlas usando promesas de js, (promises), y nuestro método connect ahora queda
configurado así:
Ahora vamos comprobar la conexión, si todo salió bien se verá una pantalla similar a esta:
para poder usarlas debemos importarlas en el index.js, y además de aquí en adelante queremos
anteponer el prefijo “/api” a cada uno de los endpoints, para esto agregaremos un middleware
que hará que la URI del endpoint se vea así /api/users, ó /api/products, etc (línea No 13). En el
código esto se verá así:
Ahora para probar este código deberíamos usar un cliente REST (como postman), nosotros para
hacer estas pruebas usaremos la extensión REST Client que nos permite probar los endpoints,
entonces la agregamos (vamos a la opción del lado izquierdo de la pantalla, una vez allí
buscaremos la extensión REST Client y la instalaremos), y creamos el archivo request.http en la raíz
del proyecto, en este momento mi proyecto luce así:
En el centro de la pantalla se puede apreciar el código digitado dentro del archivo de pruebas
request.http, para iniciar la prueba se da click en el enlace que muestra Send Request en la parte
superior del llamado del método POST, entonces se genera la petición y al lado derecho de la
pantalla se ve la respuesta, que en este caso fue exitosa (HTTP/1.1 200 OK), y nos muestra el
mensaje programado en este endpoint.
Como estamos usando mongoose para conectarnos a la BdD, tenemos que crear un modelo de
datos (schema) para cada tipo de datos que tengamos, con ellos entonces vamos a gestionar los
procesos de inserción, consulta, borrado y actualización en la BdD desde la API. El eschema de los
usuarios (userSchema) del proyecto se verá así:
Teniendo este schema, vamos a usarlo para el endpoint de crear usuario, entonces debemos:
En este punto probamos el endpoint de crear usuario nuevamente usando el request.http, y nos
muestra como respuesta (al lado derecho de la imagen) el objeto que se creó en la BdD, y el
número de respuesta 200, lo que significa que todo salió bien.
Para obtener todos los documentos de la colección de usuarios, vamos a implementar el método
find que viene del objeto userSchema, el código a implementar dentro de la ruta de nuestros
usuarios se verá así:
import y require en JavaScript: Diferencias [Guía 2024] | KeepCoding https://keepcoding.io/blog/import-y-require-en-javascript/
¿Qué es nodemon en Node.js? - Geek Nómada (geeknomada.blog) https://geeknomada.blog/nodejs/que-es-nodemon-en-node-js/
Y para comprobar la nueva funcionalidad implementada, crearemos un nuevo llamado al endpoint
con el método GET desde el archivo de pruebas request.http, así:
Del lado derecho se ve el código implementado para probar el endpoint de users con el método
GET, y al lado izquierdo el resultado de la prueba, donde se ven los documentos que existen en
este momento en la colección users dentro de MONGODB
Para alcanzar esta tarea vamos añadir un nuevo endpoint dentro del archivo users.js en la carpeta
routes, el método implementado tomará un parámetro como parte del endpoint y con este se
hará uso del método findById del schema para ubicar el documento solicitado, el método se verá
así:
Ahora agregaremos un llamado al enpoint dentro del archivo de pruebas de REST Client, en este
momento el archivo se verá así:
Y al probar pasándole el id de alguno de los documentos registrados retornará los datos de este
La actualización de los datos de un usuario necesita la creación de un nuevo endpoint, que en este
caso va a necesitar el id del usuario a consultar (línea 37), y para completar los requisitos los datos
del usuario que van a ser actualizados (línea 38), en esta tarea usaremos el método updateOne al
que se le pasa como parámetros el id y los datos obtenidos del body, en la siguiente figura de
muestra el código de este método en el archivo users.js de la carpeta routes.
Y para la prueba se crea el llamado al endpoint usando el método PUT, y claro enviando los datos
que se van a actualizar y para identificar el usuario se envía el id del usuario.
Esta es la vista del momento de la prueba, el resultado anuncia que se ha modificado 1 documento
con el cual hubo coincidencia en la colección
Para realizar las pruebas de este método se agrega un llamado al endpoint dentro del
request.http, enviándole el id del elemento a eliminar