El objeto req (Request) en Express representa el llamado HTTP y tiene diferentes propiedades del llamado, como la cadena de texto query (Query params), los parámetros de la URL (URL params), el cuerpo (Body), los encabezados (HTTP headers), etc.
Para acceder al req basta con acceder al primer parámetro de nuestros router handlers (router middleware) ó middleware.
Contiene los pares de llave-valor de los datos enviados en el cuerpo (body) del llamado (request). Por defecto es undefined pero es establecido cuando se usa algún "body-parser" middleware como body-parser y multer.
En Postman cuando hacemos un request y enviamos datos en la pestaña Body, estos middlewares son los que nos ayudan a entender el tipo de datos que vamos a recibir en el req.body.
Aquí podemos ver como se pueden usar estos middlwares para establecer el valor del req.body:
const app =require("express")();const bodyParser =require("body-parser");const multer =require("multer");const upload =multer();// Para datos tipo multipart/form-dataapp.use(bodyParser.json());// Para datos tipo application/jsonapp.use(bodyParser.urlencoded({extended:true}));// Para datos tipo application/x-www-form-urlencodedapp.post("/profile", upload.array(),function(req, res, next){console.log(req.body); res.json(req.body);});
Esta propiedad contiene un objeto con las propiedades equivalentes a los parámetros nombrados en la ruta. Por ejemplo, si tenemos una ruta de la forma /user/:name entonces la propiedad name está disponible como req.params.name y allí podremos ver su valor. Supongamos que llamaramos a la ruta con /user/glrodasz, entonces el valor de req.params.name sería glrodasz. Este objeto por defecto tiene el valor de un objeto vacío {}.
// GET /user/glrodaszreq.params.name;// => "glrodasz"
req.query
Esta propiedad contiene un objeto con las propiedades equivalentes a las cadenas de texto query de la ruta. Si no hay ninguna cadena de texto query tendrá como valor por defecto un objeto vacío {}.
Finaliza el proceso de respuesta. Este método viene realmente del core de Node.js, específicamente del método response.end() de http.ServerResponse.
Se usa para finalizar el request rápidamente sin ningún dato. Si necesitas enviar datos se debe usar res.send() y res.json().
res.end();res.status(404).end();
res.json()
Envía una respuesta JSON. Este método envía una respuesta (con el content-type correcto) y convierte el parámetro enviado a una cadena de texto JSON haciendo uso de JSON.stringify().
El parámetro puede ser cualquier tipo de JSON, incluido un objeto, un arreglo, una cadena de texto, un boolean, número, null y también puede ser usado para convertir otros valores a JSON.
Uy, yo creo que esta sección amerita una explicación mejor. Creo que queda muy técnico y es muy fácil perderse en esta explicación. Además hablan de los middlware como si fuera un tema ya visto.
tienes razón
Esta clase es realmente sencilla:
El request trae todos los datos del cliente hacia el servidor (client => request => server).
El response se usa para cargar la respuesta que se devuelve al cliente (server => response => client)
Correcto amigo, solo un detalle, ambos objetos tienen muchas propiedades que en formación son vitales el entenderlas.
Aquí mi solución.
Muy bueno pero no hacia falta meter ese segundo if dentro del primer else. Saludos
:thumbsup:
básicamente no está nada explicado, habla de cosas que no ha mencionado con anterioridad, como middleware, request.params, req.body, todo explicado muy minimo y sin ejemplos practicos, termino sin entender nada esta seccion.
Me parece que muchas de estas cosas se entienden al seguir la ruta en orden, al empezar el curso yo también estaba algo confundido al principio. Lo único que suena un poco extraño es el middleware, pero el req y los params y eso, se entiende.
Podrás explicarme la diferencia entre req.params y req.query?, te agradecería, te mando saludos!.
Tengo la costumbre de que aunque sea un programa sencillo cuyo input controle, le meto validaciones
const express =require('express');const app =express();const{ config }=require('./config/index');app.get('/birthday',function(req, res){if(req.query=={}){ res.send(` <h2> Debes enviar tu fecha de nacimiento por GET con los siguientes parametros</h2>
<ul>
<li> day</li>
<li> month</li>
<li> year</li>
</ul>
`);}const{ year }= req.query;if(year ==undefined){ res.send(` <h2> Al menos envia el año ?year=1900</h2>
`);}elseif(!Number.isInteger(year)&& year <1000){ res.send(` <h2> El parametro año debe ser un número y debe ser de 4 digitos por ejemplo ?year=1900</h2>
`);}let result = year %4==0&&(year %100!=0|| year %400==0)?true:false;const anoB = result ?'Si':'NO'; res.send(`<h2> Tu año de nacimiento ${anoB} es bisiesto</h2>`);});app.get('/json',function(req, res){ res.json({hello:'world'});});app.listen(config.port,function(){console.log(`Listening localhost:${config.port}`);});```
gracias
Pequeño resumen y explicación para aquellos que no están familiarizados con las peticiones y respuestas HTTP:
Un servidor/API en general se encarga de 2 cosas: recibir peticiones (req | request) desde el cliente y devolver una respuesta (res | response) al mismo cliente.
Un middleware es una herramienta que va a recibir las peticiones en formatos HTML, escritos de forma un poco compleja (incluso encriptados para conexiones HTTPS) y las va a transformar en objetos faciles de manejar (req y res) que recibimos en nuestro código. Además, el middleware también va a tomar nuestra respuesta (ejemplo: res.send("Hello")) y la va a transformar en respuestas HTML mas complejas y devolverlas al navegador. En resumen, el middleware hace una tarea de parse para simplificar el manejo de respuestas y peticiones HTML.
Peticiones (req | request):
Principalmente hay 2 tipos de peticiones: GET y POST
GET es la mas simple y se ejecuta cada vez que intentamos acceder a un URL por ejemplo:
https://platzi.com/home
Alli, el navegador hace una petición GET de la ruta /home
Las peticiones GET también pueden contener variables por ejemplo en localhost/user/?id=1 se va a hacer una petición a la ruta /user/ enviando la variable id = 1.
POST es mas compleja y permite enviar datos desde el cliente hasta el servidor de diferentes tipos, por ejemplo texto plano, JSON, binarios, etc. Este tipo de petición contiene cabeceras (Headers) que permiten decirle al middleware el tipo de datos que tiene que tratar para hacerlo llegar a nuestra aplicación.
Respuestas (res | response):
Es la respuesta que va a ser enviada desde el servidor hasta el cliente. Esta respuesta puede ser un contenido html, un binario, un JSON, etc. Por ejemplo cuando hacemos el GET de https://platzi.com/home, la respuesta va a contener el html que va a ser cargado en el navegador para visualizar el home de platzi. Al igual que cuando accedemos a un curso, hay respuestas de tipo binario que se hacen para cargar los videos. etc.
Espero este resumen les ayude un poco dado que estos temas son un poco mas profundos.
gracias
Yo decidi hacerlo con el metodo post para poder tener un formulario. Aca esta mi solucion:
Muy bueno bro, pero una cosa: esstas condicionando dos veces. En esBisiesto y dentro del app.post. Te recomiendo que la funcion esBisesto retorne el es visiesto o no, ya que su mero proposito es la condicion.
Pero me ha gustado leer tu codigo,
me da flojera escribir el mio hehhehehehe
Pero la verdad que esta muy bueno, les has aumentado el nivel con el fomulario.
Mi solución al reto :D
Precisamente así lo solucione, como quién dice, la rueda ya esta hecha debemos usarla :) y más con todos los modulos que ya nos ofrece NodeJs
Aquí mi solución
BIen comentado y bastante limpio hermano, felicidades.
Bueno, aquí mi solución al reto, pase todo directo a un if
app.get('/year/:year',function(req, res){let y = req.params.year;if(y %4===0&& y %100!==0|| y %400===0){ res.send('True');}else{ res.send('False');}})
Primera solucion
Mejorando el codigo
Explicacion de bisiesto
Estuve algunos videos adelante, y ahora repitiendo este contenido ya es mas claro todo.
yo igual y vaya que todo toma sentido ahora
home
Respuesta
Respuesta
Respuesta
messges.js
year.js
index.js
head all files html
body index.html
body leap.html
Ey! Tengo un super un resumen con una explicacion y ejercicio resuelto de manera entendible que les encantara!
Resumen: METODOS. GET => se ejecuta cuando el cliente requiere algo de nuestra pagina, basicamente cuando requiere datos. Por lo tanto el metodo GET le dara a el cliente esos mismos datos que el requiere.
POST => nos sirve para guardar/tomar recursos externos(del cliente) y guardarlos en el back-end. ejemplo el cliente nos da su fecha de nacimiento en un form, esto lo guardamos en el back-end y lo trabajamos de la manera que queramos.
continuemos con otro apartado-----------------------
Bien, en mi opinion el req.body es el mas interesante, ya que podemos obtener la data del body y con esto trabajar los datos en nuestro back-end.
bien, y si llevamos esta informacion a un campo real?
const express =require('express');const bodyParser =require('body-parser');const app =express();const{ config }=require('./config/index');app.use(bodyParser.urlencoded({extended:true}));const formulario ='<h2> Calculadora de edad </h2>'+'<p> Ingresera su fecha de nacimiento y nuestro algoritmo le dira cuantos años posee actualmente</p>'+'<form method="post" action="/edadActual">'+'<input type="number" name="anioIngresado">'+'<input type="submit" submit value="Enviar">'+'</form>';app.get('/',(req,res)=>{ res.send('<html><body>'+ formulario +'</body></html>');});app.post('/edadActual',(req,res)=>{let años = req.body.anioIngresado;let edadActual =2021- años; res.send('<html><body>'+'<h2>Calculemos Su Edad</h2>'+`<p>Entonces si naciste en ${años} y estamos en 2021, por lo tanto tu edad Actual es: </p>`+ edadActual +'</body></html>');});app.listen(config.port,()=>{console.log(`Live at https://localhost:${config.port}`);})
Hola como estan!! Encontre un video que aclara un MONTON.
https://youtu.be/0t93qDkGcB0, escribanle el https, ya que se lo saque.
<code>constesBisiesto=(year)=>{if((year %4==0&& year %100!=0)|| year %400==0){return`El ${year} es bisiesto`;}else{return`El ${year} no es bisiesto`;}};module.exports={ esBisiesto,};</code>
Cool! XD
jajajajaja
Mi versión del reto. Todavía no se bien como manejar el html dentro del res.send(), me gustaria entender como mandar stream al res.send
Seguro más adelante lo aprenderemos o habrá que investigar.
const express =require('express');const app =express();const{ config }=require('./config/index');app.get('/',function(req, res){const text =` <h2> Verificador de años biciestos </h2>
<p> Para verificar si un año es bisiesto
debes accerder a la ruta:</p>
<p style="text-align:center; font-size:30px">127.0.0.1:${config.port}/bisiesto/:año </p>`; res.send(text);});app.get('/bisiesto/:year',function(req, res){const year = req.params.year;let respuesta ='';if(year %4===0){ respuesta ='si';}else{ respuesta ='no';}const text =`<h2> Respuesta </h2>
<p> El año <strong>${req.params.year} </strong> ${respuesta} es año bisiesto </p>
`; res.send(text);});app.listen(config.port,function(){console.log(`Escuchando el puerto ${config.port}`);});
Challenge completado 🤠
const express =require('express');const app =express();const{ config }=require('./config/index');app.get('/',function(req, res){ res.send('Envia un año y comprobaremos si es o no un año bisiesto');});app.get('/:year',function(req, res){const year =parseInt(req.params.year);console.log(year);if((year %4===0&& year %100!==0)|| year %400===0){ res.send(`${year} es un año bisiesto`);}else{ res.send(`${year} no es un año bisiesto`);}});app.listen(config.port,function(){console.log(`Listening to port https://localhost:${config.port}`);});
muy interesante como maneja las peticiones Node.js