MERN
MERN
Full Stack para desarrollo Web. Stack se refiere a la pila de herramients utilizada para
desarrollo.
M por Mongo DB
Base de datos NoSQL orientada a documentos y grandes cantidades de datos. Los datos
son almacenados en un formato similar a json llmado Bson. Las tablas se conocen como
colecciones y los registros como documentos.
Se usa con un ORM llamado mongoose ya que al trabajar con MERN no hay soporte para
las vistas, la autenticacion, los correos y otros servicios, estos tienen que ser configurados
por nosostros. No es lo mismo al trabajar con Laravel que ofrece un paquete completo para
cubiri estas configuraciones.
E por Express JS
Se implementa react ya sea con next, remix para la renderizacion de las vistas de la
palicacion
N por Node JS
Entre sus ventajas se encuentra lagran cantidad de librerias disponibles paa integrarlos en
proyectos con NPM. Puede consultar bases de datos , autenticar usuarios, manejar rutas y
mucho mas
El servidor se comunica con las bases de datos y otros servicios. En otras palabras, actúa
como punto intermedio entre la aplicación frontend y la base de datos y otros servicios. El
servidor hace cosas que la capa de frontend no puede hacer como: autenticación, validación
de datos, trabajo con archivos del sistema, encriptación, etc.
Node es un framework por si mismo pues ofrece mecanismos de muy bajo nivel. El
framework express es usualmente utilizado para implementar aplicaciones REST en
servidores Node.
npm init
Crear el archivo index.js que es el archivo que tendra la configuracion del servidor,
para esto se usa commonJS
const express=require(“express”);
app.listen(4000,()=>{
})
Para mandar a llamar este archivo hacemos una modificacion en el archivo package.json,
en el area scripts escribimos en lugar de “tests”, colocamos “dev”
"scripts": {
"dev": "node index.js"
}
Esto lo que quiere decir es que al ejecutar el script dev va a llamar a node, va a buscar el
archivo index.js y va a ejecutar su contenido
¿Qué es CommonJS (CJS)?
Es probable, sobre todo si no llevas mucho tiempo en el ecosistema Javascript, que te hayas
encontrado con conceptos como CommonJS (CJS), ES Modules (ESM), o incluso algunos
ya menos frecuentes como AMD, System, UMD, IIFE o similares. Dichas siglas o
nombres, suelen hacer referencia al sistema de módulos (importaciones desde otros
archivos) utilizado en Javascript.
CommonJS surge cerca de 2009 como una serie de pautas para crear un sistema de
módulos en el ecosistema Javascript. Algo más tarde, el equipo de NodeJS implementó
parcialmente una versión síncrona de CommonJS, por lo que consigue popularizar un
sistema de módulos no oficial como el que puedes ver a continuación:
js
// module-name.js
module.exports = {
/* ... */
}
// index.js
const module = require("./module-name.js");
const package = require("package");
module.method();
Sin embargo, estos require() son creados por NodeJS y no son compatibles directamente
en navegadores, salvo que se preprocese o transpile antes con alguna herramienta como
podría ser un empaquetador o automatizador del estilo de Webpack, Parcel, Rollup, Babel
o similar. Estas herramientas buscan los require() y los sustituyen por el código del
fichero correspondiente, uniendo y empatando todos los archivos Javascript necesarios de
nuestra aplicación web en un sólo archivo Javascript llamado bundle.
El módulo npm body-parser permite realizar esta tarea. No es necesario programarla. Solo
se requiere instalar body-parser y habilitar json() así como url-encode como middlewares
para convertir datos a JSON.
¿Qué es Nodemon?
Es una herramienta que nos ayuda a reiniciar nuestro servidor (o algún otro proceso
de nuestra computadora) cada vez que hagamos un cambio en nuestro código:
https://www.npmjs.com/package/nodemon. Toma la finalidad de ejecutarse como un
demonio que vive para ejecutar comandos que deben de mantenerse ejecutando.
Cuando se importan dependencias que se han instalado no hace falta colocar la extension, si
se importan modulos, es decir funciones contenidas en otros archivos que se crearon se
deben especificar la ruta y la extension.
Creando una Base de Datos con MongoDB y Conectando con Compass
Registrarse en Mongo Db, elegir plan free, crear el cluster con los datos por defecto
iniciales, crear el usuario, password y los datos de la conexcion, finish and close.
En Mongo DB dar click a connect, seelccionar en este caso conectar con mongoDB
compass, copiar el link de conexión, ir a compass, pegar este link , colocar el password y
dar click a conectar.
Mogoose
MongoDB es una base de datos de documentos NoSQL sin esquema. Significa que puede
almacenar documentos JSON en él, y la estructura de estos documentos puede variar,
porque que no se aplica como las bases de datos SQL. Esta es una de las ventajas de usar
NoSQL, ya que acelera el desarrollo de aplicaciones y reduce la complejidad de las
implementaciones.
Para instalar mongoose, creamos una terminal, accedemos con cd a la carpeta backend y
alli corremos
Para crear mayor separacion del codigo según su funcionalidad, se crea una carpeta llamda
config dentro de la carpeta banckend, la cual contendra un archivbo llamado db.js, este
archivo contendra el codigo para conectarnos a la base de datos.
La url de conexión a mongoDB deb estar oculta, asi como cualquier otra url de ruta de
conexión a BD de nuestra aplicación, par esto se usa las variables de entorno. En MERN
vamos a usar dotenv , instalamos dtenv con npm i dotenv,lo importamos en el archivo
index.js con import dotenv from ‘dotenv’
HOLA=Mundo
Ejemplo
console.log(process.env.HOLA)
A lo que se refiere una variable de entorno es que puedes tener cieros valores para localhost
y en produccion otros diferentes.
EXPRESS INICIAR UN PROYECTO
Pasos iniciales
Cuando importamos express tenemos acceso a una funcion que nos permite crear
una aplicación de express, es la funcio nde mayor nivel que podemos tener para crear
nuestra aplicación de express.
El llamado de esta funcion nos retorna una aplicación de express, con esto ya se puede
comenzar a definir las rutas.
Normalmente, en este punto se trabaja con una base de datos, para efectos de este curso
inicial se va a simular una base de datos con un archivo que tiene un formato json pero con
un objeto JS.
Escribir app seguido del metodo get, con los parametros path, como una cadena de
caracteres y como segundo argumento pasamos una arrow function , esta arrow function
toma como paremtros request y response (req y res), ellos tienen los mismos metodos y
propiedades que en Node.En esta arrow function se especifica que va a suceder cuando la
palicacion se encuentre con el path que se le esra dando al metodo get como primer
argumento.
Esto quiere decir que se va a asignar la variable port definida en el archivo .env o el puerto
3000, cualquiera de los 2 que exista.
app.listen(PUERTO, ()=>{
);
Este metodo recibe 2 argumentos: El puerto y una arrow function que define el servidor
cuando comience a escuchar.
AGREGAR RUTAS
app.get(‘/api/cursos’,(req,res)=>{
res.send(infoCursos)
});
Para establecer las rutas por parametro se colocan en la url 2 puntos (:) luego de la barra
seguidos del nombre del parametro url. Ese parametro se extrae del objeto de solicitud
request.
Importante: el nombre que va despues de los 2 puntos debe coincidir con alguna de las
llaves aasignadas en el archivo infoCursoso, en este caso debe coincidir con el nombre del
campo en una BD relacional o nombre de llave en una BS NoSQL
Ejemplo
app.get('/api/cursos/programacion/:lenguaje',(req,res)=>{
const {lenguaje}=req.params;
const
resultados=infoCursos.programacion.filter(curso=>curso.lenguaje==lenguaje);
if (resultados.length===0){
return res.status(404).send(`No se encontraron resultados para el lenguaje $
{lenguaje}`);
}
if (resultados.length === 0) {
return res.status(404).send(`No se encontraron cursos de ${lenguaje} de nivel
${nivel}`);
}
res.send(JSON.stringify(resultados));
});
PARAMETROS QUERY
Sirven para realizar consultas y ordenarlas de acuerdo a ese parametro query. Por ejemplo
https://localhost:3000/cursos/programacion/python/?ordenar=vistas
parametro valor
query campo en la BD