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

A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Informaci贸n contextual: Leer las cabeceras

9/33
Recursos

Aportes 44

Preguntas 5

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Node me ha abierto muchas puertas鈥

Cada vez me enamoro m谩s de este curso.

Bueno, este es mi punto de vista (favor decirme si estoy equivocado en algo) pero hasta donde tengo entendido node js por si solo nos permite ejecutar JavaScript en un entorno diferente al navegador y pues express nos permite utilizar las node como back-end.

Super interesante el curso

Excelente Profesor

Devolver m煤ltiples headers
Es posible devolver varios headers en una misma instruccion, o en multiples lineas de codigo.
C贸digo de node.js
router.get("/message", function(req,res){
console.log(req.headers);

res.header( {
"custom-header":"nuesto valor personalizado",
"otro-header":"el otro header"
} );

res.header( "mas-headers","mas headers");

res.send('lista de mensajes');
});
Respuesta

const express = require('express')
const bodyParser = require('body-parser')
const router = express.Router()
var app = express()

app.listen(3000)
console.log('La aplicaci贸n esta escuchando en http://localhost:3000')
app.use(bodyParser.json())
app.use(router)


router.get('/message', (req, res) => {
    console.log(req.headers)
    res.header({
        'custom-header': 'another value'
    })

    res.send('List message')
})

router.post('/message', (req, res) => {
    console.log(req.body)
    console.log(req.query)
    res.send(`Message ${req.body.text} added`)
})

/* app.use('/', (req, res) =>{
    res.send('HOLA')
}) */

vengo de trabajar con PHP, y por el momento me ha gustado mucho nodejs

Genial!!

Cuando comenc茅 a ver backend en la escuela de javascript, no pude estar m谩s perdido, daban por sentado casi todos los conceptos, pero ESTE curso, hasta el momento, ha sido de pu** madre !!

Que excelente curso!! Cada vez me gusta mas NodeJS, vengo del mundo de spring boot y nos tardamos mas en configurar el proyecto que en desarrollar las API鈥檚, veo que con nodeJS es mas sencillo arrancar un proyecto desde cero.

Informaci贸n contextual: Leer las cabeceras


<h3>Cabeceras http</h3>

Las cabeceras (en ingl茅s headers) HTTP permiten al cliente y al servidor enviar informaci贸n adicional junto a una petici贸n o respuesta.

Una cabecera de petici贸n esta compuesta por su nombre (no sensible a las mayusculas) seguido de dos puntos 鈥:鈥, y a continuaci贸n su valor (sin saltos de l铆nea). Los espacios en blanco a la izquierda del valor son ignorados

Mas informacion: MDN Web Docs: Headers.


<h3>Recibir cabeceras del cliente</h3>

C贸digo:

router.get('/message/:id', function (req, res) {
    console.log(req.headers);
    res.send('Headers enviados por el cliente');
})

Resultado:

{
  'content-type': 'application/json',
  'user-agent': 'PostmanRuntime/7.26.5',
  accept: '*/*',
  'cache-control': 'no-cache',
  'postman-token': 'be95840f-732e-4260-b337-3f3e9b9911be',
  host: 'localhost:3000',
  'accept-encoding': 'gzip, deflate, br',
  connection: 'keep-alive',
  'content-length': '21'
}

<h3>Enviar cabeceras desde el servidor</h3>

C贸digo:

router.get('/message/:id', function (req, res) {
    res.header({
        'custom-header': 'my-header'
    })

    res.send('Enviando headers al cliente')
})

Este curso hace que me duela mucho la cabeza

As铆 si se explica Nodejs鈥!

Esta Genial el Curso

Est谩 excelente el curso

Excelente, la parte de cabeceras personalizadas.

No habia entendido tan bien node como con este video鈥 wow simplemente genial este curso

Excelente clase =)

Me encanta este curso

const express = require('express')
const bodyParser = require('body-parser')
const router = express.Router() //nos permite separar cabeceras, metodos, url

var app = express()
app.use(bodyParser.json()) // agregamos json para que acepte las peticiones de ese tipo, asi como urlencoded
app.use(bodyParser.urlencoded({extended: false}))
app.use(router)

router.get('/message', function(req, res) {
    console.log(req.headers)
    res.header({
        "custom-header": "Nuestro valor predeterminado"
    })
    res.send('Lista de mesajes a帽adido correctamente')
})

router.post('/message', function(req, res) {
    console.log(req.body)
    console.log(req.query)
    res.send('Mensaje ' + req.body.text + ' a帽adido')
})

router.delete('/message', function(req, res) {
    res.send('Mensaje eliminado')
})

app.listen(3000)
console.log('La app esta escuchando en http://localhost:3000')```

Informaci贸n de headers:

    res.header({
        "custom-header":"valor personalizado",
        "cache-control": "max-age=60"
    }) ```

En donde podemos ver documentacion sobre HTTP

excelente clase

Todo muy claro !

Ahora todo se aclara

Podr铆a usar el header del idioma para mandar la app en ingles o espa帽ol dependiendo de la configuraci贸n del browser del usuario?

excelente inicio

This is my code!

const express = require('express');
const bodyParser = require('body-parser');
const router = express.Router();

var app =  express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false }));
app.use(router);

app.get('/headers', (req, res) => {
    console.table(req.headers)
    res.header({
        'custom-header' : 'Valore personalizado para el cliente'
    })
    res.send(req.headers);
});
app.post('/pruebas', (req, res) => {
    console.log(req.query);
    console.log(req.body);
    res.send('Datos regresados '+ req.body.text +' correctamente');
});
app.post('/', (req, res) => {
    res.send('Que ondas Soy tu primer petici贸n con POST');
});
app.listen(3000);
console.log('La aplicaci贸n esta escuchando en pueto:3000');```

Una clase excelente

muy bien!

router.get('/message', (req, res) => {
    console.log(req.headers);
    res.header({
        "custom-header": "Nuestro valor personalizado"
    })
    res.send('Lista de mensajes');
});

Excelente profesor, hab铆a visto tutoriales de nodeJS pero nada como este curso, es de lo mejor que he encontrado!!

Cache-Control tambi茅n se puede fijar as铆:
Por ejemplo para indicarle que guarde la respuesta en cach茅 por 300 segundos

res.set("Cache-Control", "public, max-age=300")

Cabecera. Saber de donde viene la petici贸n

const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser')

var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(router);

router.get('/message', function(req, res){
    console.log(req.headers);
    res.header({
        "custom-header": "Nuestro valor personalizado"
    })
    res.send('Lista de mensajes');
});

router.delete('/message', function(req, res){
    console.log(req.body);
    console.log(req.query);
    res.send('Mensaje ' + req.body.text + ' eliminado correctamente');
});

app.listen(3000);
console.log('La aplicaci贸n esta escuchando en http://localhost:3000')```

Excelente.

const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const router = express.Router();

const port = 4000;
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(router);

router.get('/', (req, res) => {
  console.log(req.headers);
  res.header({
    "Inicio-Sesion": "true"
  });
  res.send('Hemos ingresado con GET, 隆隆脡XITO!!');
});

router.get( '/message_danger--green', (req, res) => {
    console.log(req.body);
    console.log(req.query);
    res.send(`My message is: ${ req.body.Advertence }. Access: OK`);
});

app.listen(port, () => {
  try {
    console.log(`Listening on port: ${port}`);
  } catch(err) {
    console.error(`My error馃敟: ${err}`);
  }
});
const express = require("express");
const bodyParser = require("body-parser");
const router = express.Router();

var app = express();
app.use(bodyParser.json());
app.use(router);

router.get("/message", function (req, res) {
  console.log(req.headers);
  res.header({
    "custom-hrader": "header peoersonalizado",
  });
  res.send("lista de mensajes");
});
router.delete("/message", function (req, res) {
  console.log(req.query);
  console.log(req.body);
  res.send("mensaje a帽adido");
});

// app.use("/", function (req, res) {
//   res.send("hola");
// });

app.listen(3000);
console.log(
  "la app esta escuchando en http://localhost:3000"
);

Saludos, con una cabecera personalizada puedo crear una que me valide ejemplo un valor para que solo funcione en un servidor, si esa app la cambian a otro servidor, deje de funcionar porque no coincide? solo lo estoy pensando por cuesti贸n de seguridad

Haciendo destructuring de las request 馃槂

home = (req, res)=>{

    const {host,accept,'user-agent':user, connection, 'cache-control':cacheC } = req.headers
    res.header({
        "custom": "customs"
    })
    res.send(`${host} , ${accept}, ${user}, ${connection}, ${cacheC}`).status(200)
}

Si ustedes quieren establecer una cabecera, tradicional de HTTP, para asignar un valor, por ejemplo Cache-Control, pueden hacerlo de la siguiente manera:

const cacheResponse = (req, res, next) => {
    try {
        if (mode === 'dev') res.set('Cache-Control', `public, max-age=${cacheTimingSeconds}`);
        else res.set('Cache-control', `no-store`);
        next();
    } catch (error) {
        next(error);
    }
};

Cabe mencionar que en modo dev, la cach茅 no deber铆a ser manipulada porque nos generar铆a problemas

usar la siguiente l铆nea como en el video

res.headers({...})

me di贸 el siguiente error:

res.headers is not a function

Me funcion贸 con estas dos lineas (cualquier de ellas):

res.header({'mi-header': 'valor'})

o

res.header('mi-header', 'valor')

Las cabeceras que nos seran muy utiles:

  • cache-control
    Para poder setear cache especifico para imagenes o archivos de js, etc
  • user-agent
    Para saber de d贸nde viene, mobile, appel, win, linux, etc.
  • accept
  • accept-encoding

Estas ultimas 2 son cabeceras que podremos usar en algunos casos especiales.

Tambien podemos mandar headers en las respuestas. 馃く

Lo cual es util para:

  • Definir cabeceras personalizadas.
  • Definir las cabeceras que nos interesen dentro de las que hay
  • Definir con el front que solo responda el servidor si viene una cabecera en especifico