Conocer y comprender c贸mo se realizan las conexiones hacia los servidores a trav茅s de internet y sus implicaciones en el desarrollo de servidores

1

Bienvenida y presentaci贸n del curso

2

Qu茅 es Node y c贸mo instalarlo

3

驴Qu茅 son y c贸mo se usan las peticiones HTTP?

4

M茅todos, cabeceras y estados

5

Cuerpo y query de la petici贸n

Crear un servidor HTTP en Javascript, y comenzar a escuchar y responder peticiones desde un cliente .

6

Crear un servidor HTTP desde NodeJS

7

驴C贸mo pueden venir las peticiones?

8

Recibir informaci贸n desde el cliente: Body y Query

9

Informaci贸n contextual: Leer las cabeceras

10

Tipos de respuesta: Vac铆a, plana, con datos y estructurada

11

Respuestas coherentes

12

Servir archivos est谩ticos

13

Errores: C贸mo presentarlos e implicaciones en la seguridad

Comprender y desarrollar la arquitectura b谩sica de un backend en NodeJS, y comunicarse entre m贸dulos

14

Conceptualmente: Rutas, controladores y bases de datos

15

Rutas y capa de red: Responsabilidades y l铆mites

16

Controladores: Definiendo la l贸gica de negocio

17

Almacenando la informaci贸n en una base de datos

Utilizar una base de datos para definir, modelar, almacenar y recuperar la informaci贸n de nuestra aplicaci贸n

18

Tipos de Bases de Datos: Relacionales y No Relacionales

19

Crear y Configurar tu Base de Datos con MongoDB

20

MongoDB: Almacenar y leer datos

21

MongoDB: Actualizar datos

22

MongoDB: Consultar datos

23

MongoDB: Eliminar Datos

24

Gestionar conexiones a la base de datos desde la API

Uso de entidades para crear aplicaciones escalables

25

Escalando la arquitectura: M煤ltiples entidades

26

Relacionando nuestras entidades

27

C贸mo recibir ficheros desde NodeJS

28

Guardar el fichero en el servidor

Conocer el protocolo de websockets, e implementar comunicaci贸n cliente/servidor con SocketIO.

29

WebSockets: Qu茅 son, por qu茅 son interesantes y c贸mo usarlos

30

Manejo de Websockets con NodeJS

31

Conectar la API al servidor de WebSockets

Revisi贸n de lo aprendido, y pr贸ximos pasos

32

Revisi贸n y pr贸ximos pasos

33

Tips para escalar nuestro proyecto

No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Rutas y capa de red: Responsabilidades y l铆mites

15/33
Recursos

Aportes 44

Preguntas 13

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

Hola, Sergio,
.
Cualquier aplicaci贸n va a tener tres puntos de responsabilidad, que deben responder a tres preguntas:

驴C贸mo me comunico con ella?
驴Qu茅 hace?
驴D贸nde y c贸mo se guardan los resultados?
.
La respuesta a estos tres puntos, corresponden a las tres capas que vamos a generar:
Capa de red (en ingl茅s 鈥渘etwork鈥)
Capa controladora (en ingl茅s, 鈥渃ontroller鈥)
Capa de almacenamiento (en ingl茅s, 鈥渟tore鈥)
.
De esto hablo en profundidad en la clase anterior.
.
La primera capa es una capa de red, porque la conexi贸n con la aplicaci贸n se hace a trav茅s del protocolo de comunicaci贸n en red HTTP. Es la responsable de comunicar al cliente HTTP con nuestro c贸digo del controlador.
.
Si recuerdas las primeras clases, ver谩s que el protocolo HTTP construye una petici贸n con una direcci贸n (route), un verbo (method), unas cabeceras (headers) y un mensaje (body).
.
Por esto, cada uno de nuestros componentes, tendr谩 un archivo 鈥渘etwork.js鈥 encargado de traducir la petici贸n del cliente HTTP a la acci贸n que queremos realizar en nuestro controlador.
.
As铆, lo que hace nuestro c贸digo (la funcionalidad) no est谩 acoplado a unos requisitos de red, y puede ser reutilizado con otras fuentes de entrada (colas MQTT, una biblioteca externa, microservicios鈥).
.
La opci贸n que planteas, llamarlo 鈥渋nterface鈥 en lugar de network es tambi茅n una opci贸n v谩lida. En caso de que tu carpeta se llame interface (o, quiz谩 mejor, 鈥渋nterfaces鈥), llama a tu archivo 鈥渉ttp-response.js鈥 para poder generar nuevas interfaces de escucha o/y respuesta no HTTP.
.
隆Gracias!

No puedo responder a tu mensaje. Quer铆a agradecer tu dedicaci贸n y tiempo tanto del curso como de las respuestas. Un saludo.

Clase que vale la pena repetir para estar claro de todo el proceso de conexion de la app...

Al aprender esto siento algo como lo que sent铆 con Redux en el Frontend. Una manera compleja de organizaci贸n los datos que cuando la terminas integrando se transforma en una forma mas f谩cil de organizar el flujo de informaci贸n. Y mas f谩cil para escalar.

Personalmente prefiero agrupar todo por componente entonces tendr铆a /message
-/routes
-/controller
-/bd

para as铆 encontrar f谩cilmente lo que necesite de alg煤n componente

Hola, solo como aporte:

  1. En la carpeta --> network/routes.js no fue necesario requerir a express, al menos por el momento.
  2. otra forma de recibir el app desde server.js
module.exports = server => {
    server.use("/message", message);
}

Saludos!

No entiendo la estructura de network que est谩s planteando. Entiendo que lo 煤nico que puede ser considerado como 鈥渞ed鈥 o 鈥渃apa de red鈥 es el app.listen y el socket.io que forman parte de la infraestructura.

No entiendo que tienen que ver las rutas HTTP con 鈥渘etwork鈥.

El protocolo HTTP es un protocolo de la capa de aplicaci贸n, entender铆a que lo modularizaras en algo como 鈥渋nterface > response.js鈥 para reutilizar con otras infraestructuras como Websockets, porque al final es parte de la interfaz hacia el cliente (humano o m谩quina). En el examen me ha llevado a la confusi贸n.

Si alguien por aqu铆 no entiende la diferencia de usar router o no, aqu铆 les doy un enlace donde se explica a detalle y de forma sencilla: Learn to use router

Compa帽eros les dejo mi repositorio del curso, por si quieren ver la app terminada y sobre todo si quieren copiar algo de c贸digo, tiene unos ligeros cambios en los nombre de variables solamente. (Se los dejo porque en las clases que ya me sabia solo quer铆a copiar c贸digo y avanzar)

https://github.com/johan-avila/chat-backend

La funci贸n 鈥渦se鈥 de express me parece ambigua, me cuesta saber qu茅 hace exactamente.

yo lo orden茅 como

/messages
-/routes/index.js
-/controller/index.js
-/store/index.js
entonces al llamarlo con un require no es necesario hacer 鈥樷/components/messages/routes/index.js鈥 ya que por defecto toma el index.js de la carpeta y solo se lo llamar铆a como '鈥/components/messages/routes鈥
tambien funciona para las demas carpetas, por ahora me sirve.

C贸digo escrito en ES:

server.js

import express from "express";
import { routes } from "./network/routes.js";

const app = express();

app.use(express.json());
app.use(express.urlencoded({extended : false}));
routes(app);

app.use('/app', express.static('public'));

app.listen(3000);

console.info('La app esta escuchando en http://localhost:3000');

network/routes.js

import message from "../components/message/network.js";

const routes = function (server) {
    server.use('/message', message);
}

export { routes }

components/message/network

import express from "express";
import { success, error } from "../../network/response.js";

const router = express.Router();

router.get('/',(req,res)=>{
    console.log(req.headers)
    res.header({
        "Custom-header":"Nuevo valor personalizado"
    });
    success(req, res, 'Lista de mensajes');
});

router.post('/',(req,res)=>{
    console.log(req.query);
    if(req.query.error == 'ok'){
        error(req, res, 'Error inesperado', 500, 'Es una simulaci贸n de errores');
    } else{
        success(req, res, 'Creado correctamente', 201);
    }
});

export default router 

Siento que el archivo network.js deber铆a llamarse m谩s bien 鈥渟pecificResponse.js鈥 o algo as铆, pues se confunde la carpeta network con el archivo, y ya es de por s铆 complejo y confuso de entender

No me qued贸 clara la parte donde crea el archivo routes.js, 驴c贸mo hace para que funcione el enrutamiento desde el archivo network.js si en los m茅todos get y post est谩 especificada la misma ruta 鈥/鈥? Ah铆 me perd铆.

Hola chicos llevo varios dias con un mismo problema, al momento de separar las rutas (segunda mitad del video) mi programa compila y todo pero al momento de abrirlo en el navegador y hacer el POST/GET con insomia me marca un " Cannot GET / ".

Ya revise que todo este exportado de la manera correcta y no lo puedo hacer funcionar, revise los dem谩s problemas de mis compa帽eros y tampoco. Recurro a su sabidur铆a. les comparto captura de mi c贸digo



Me confunde network como archivo dentro de component/message
y la carpeta network.

Routes y Response deber铆an estar dentro de network y no tener network dentro del components/message.

Me he perdido con esto.

Pr谩ctica:

<h1>Resumen</h1>

Rutas y capa de red: Responsabilidades y l铆mites


En el archivo components/message/network.js

const express = require('express')
const router = express.Router();

const response = require('./../../network/response');
const controller = require('./controller');

router.get('/', function (req, res) {
    console.log(req.headers);
    res.header({
        "custom-header":"myheader"
    });
    response.success(req, res, 'Lista de mensajes')
});

router.post('/', function (req, res) {
    const { user, message } = req.body; 
    controller.addMessage(user, message);
    
    res.send('hola')
});

module.exports = router;

Despues, debemos concentrar todas las rutas en un unico archivo

network/routes.js

const message = require('./../components/message/network')

const routes = function (server) {
    server.use('/message', message)
}

module.exports = routes;

Y el archivo server, queda asi

const express = require('express');
// Importar la funcion router
const router = require('./network/routes');


var app = express();
var port = 3000;

app.use(express.json())
app.use(express.urlencoded({ extended: true }))

router(app); // Uso de la funcion principal

app.use('/app',express.static(__dirname + '/public'));


app.listen(port, ()=> { console.log(`Servidor corriendo en el puerto ${port}`); }) 

Perfecto!

Si retiramos la importaci贸n de express en el archivo routes.js, la aplicaci贸n sigue funcionando ya que la instancia del servidor que pasamos por par谩metro a la funci贸n viene con los m茅todos de express.

Mi pregunta es 驴ser谩 necesario importar express en este archivo?

Excelente explicaci贸n, el diagrama anterior me ayudo muchisimo. Otros profesores de Platzi deber铆an mostrar un diagrama de la arquitectura, para que uno como estudiante sepa c贸mo y en que vamos a estar trabajando.

Me gusta mucho como se estructura el proyecto

Cuando define routes.js para crear la funci贸n que a帽ade todas las rutas pasa como par谩metro a server y dice que es el servidor de express.

Mi pregunta es si en ninguna parte has definido a server o este server tiene alguna relaci贸n con server.js o cuando defini贸 el servidor express en lugar de colocar server coloc贸 la const express o server es una variable global de node js que identifica al servidor.

Exelente aplicativo

Excelente clase!!

excelente Clase鈥elicitaciones

excelente!

Yo no lo ordeno de esa forma pero es muy parecida

Responsabilidades=>rutas & l铆mites=>capa de red

A organizar el c贸digo ya se lee mejor

puro orden y terner muy claro los nombres.

I got it.

Estoy intentado resolver un problema que tengo con el server.js. Al ejecutar la sentencia router(app) express se rompe. Solo en ese caso. Si vuelvo a un punto anterior el server levanta sin problemas. A alguien le paso??

Cuando has visto distintos videos para ver el mismo tema es algo confuso llevar el nombre de los archivos o carpetas porque cada quien le pone el nombre que quiere, sin embargo a Carlos le he entendido m谩s que a ning煤n otro.

Que buena clase

Genial esto, separarlos y enlazarlos.

Esto es relevante, veamos si entend铆:

El archivo server.js sigue siendo el archivo que lanza nuestro servidor web en node.js, este archivo tiene como archivo de dependencia routes.js (rutas)

Rutas:
routes.js, nos va ayudar a definir todas las rutas que est谩 configurando el servidor, esto es para no definir m谩s de una vez el router en el servidor en caso de que el proyecto crezca, en este caso lo estamos diferenciando, con server.use (鈥榣aruta鈥,elcomponente)

El componente network:
network.js, va a ser la responsable de administrar todas las peticiones de HTTP y devolverlas al servidor.

exelente clase

este profesor es buenisimo

porque en el minuto 2:32 esta exportando el router que no se supone que eso viene de express y como es que las funciones get y post que se van al router alguien que me explique porfavor

Blew my mind!!!

En el archivo routes.js se ve claramente que la const express no se est谩 utilizando.

Qu茅 sentido tiene definir una constante que no se est谩 utilizando all铆 o que efecto tiene el solo hecho de hacerle require. Es requerida y punto.

Cuando se tiene un componente la ruta se llama as铆:

module.exports = function (server) {
    server.use("/message", message);
}

驴C贸mo se hace cuando hay mas componentes?, 驴se usa server.use por cada uno o todo crea un objeto para un solo server.use?

Si quieren ver algo parecido: Les invito a ver un repo que hice de un CRUD basico.
https://github.com/Tonnraus/Memories-Project

Me gusta mucho esta manera de ordenar los componentes