Te encuentras desarrollando tu primer backend y tu primera API. Un backend está compuesto por múltiples endpoints que serán utilizados por el front-end. Es momento de conectar ambos mundos.
¿Qué es un endpoint?
Un nuevo término que debes conocer y que siempre te acompañará. Llamamos endpoint, o punto final, a cada URL que el backend exponer para que el front-end utilice, ya sea para la obtención de datos, creación, actualización, etc.
Cada acción que tu backend pueda realizar, la misma se ejecutará a través de un endpoint.
Creando tu primer endpoint
Crear un endpoint con ExpressJS para enviar datos a un cliente es muy sencillo. Ya tienes tu servidor levantado, al mismo vamos a agregarle endpoints para la obtención de datos.
const express =require('express');const app =express();const port =3000;// Endpoint para obtener datosapp.get('/datos',(req, res)=>{const datos ='12345'; res.send(datos);});app.listen(port,()=>{console.log(`¡Servidor listo!`);});
Observa el endpoint /datos, el mismo devuelve un número. Accede a este endpoint desde la URL localhost:3000/datos y visualizarás los mismos en el navegador.
Pero la obtención de esta información por parte de un cliente no suele realizarse directamente por el navagador. En su lugar, utilizamos un cliente HTTP para lograr conectar en backend y el front-end.
Conexión de backend y front-end
Las consultas por parte de un front-end al backend se realizan por medio de un cliente HTTP. El mismo es una librería que te permitirá hacer consultas a los endpoints y obtener información.
Encontrarás muchos clientes HTTP en NPM. Para este ejemplo, usaremos uno llamado fetch que es propio de Javascript y no tendremos que instalar ninguna dependencia.
En los archivos JS de tu front-end, puedes realizar solicitudes HTTP de la siguiente manera:
Al ejecutar esta función asíncrona, obtendrás los datos del backend en la variable data pudiendo manipular los mismos y mostrarlos en el HTML de tu página.
Problemas de CORS
Puedes tener con un problema trivial al querer realizar consultas a un backend. Mejor dicho... vas a tener este problema.
CORS es un pequeño problema con el que te toparás mil veces en tu vida como programador. Pero no te preocupes, es de fácil resolución.
La consola de desarrollo de los navegadores te permitirá obtener más información cuando las cosas no funcionen. Si te encuentras con un error similar a:
Indica un problema de CORS que significa, por sus siglas en español, Intercambio de Recursos de Origen Cruzado. Es una medida de seguridad de los backend para que no cualquier cliente, o cualquier front-end, realice consultas al mismo.
El backend debe permitir explícitamente que un cliente haga consultas, de lo contrario rechazará las mismas.
Habilita CORS instalando su respectiva dependencia con npm install cors y realizando la importación de la misma.
// Importamos CORSconst cors =require('cors');// Activamos CORSapp.use(cors());
De esta forma, el backend está listo para recibir consultas y el front-end podrá obtener los datos y trabajar con los mismos.
Conclusión
Acabas de dar tu primer paso en el desarrollo full-stack, o sea, en el desarrollo backend y front-end. ¡Felicidades!
Es solo el primer paso para integrar estos los dos mundos y poder visualizar en un front-end, los datos que el backend procesa o almacena en una base de datos.
fetch(url) hace un GET (una petición para obtener algo) a la URL que se le especifique
Esta función nos retornará algo (lo que sea que se haya definido en el código del servidor).
No podemos trabajar con lo que nos retorne directamente, ya que el servidor se tomará un tiempo en responder.
Para eso utilizaremos el .then(func), que ejecutará el código de la función que le demos (en este caso, func), pasándole la respuesta del servidor como parámetro.
El .then suele ir por debajo de la función que hayamos llamado (fetch en este caso) e indentado, por pura estética nada más. Nótese que se puede hacer fetch(url).then(func) sin dejar ningún espacio.
Así, un ejemplo de código podría ser:
function decirHola(res){if(res.ok){ console.log("¡Todo bien!");}}fetch("https://google.com").then(decirHola)
Este código enviaría un request a https://google.com y, una vez tuviera una respuesta del servidor, haría decirHola(respuesta), siendo respuesta la respuesta que haya dado el servidor de esa URL.
Lo que pasa es que muchas veces la función que usamos (en este caso decirHola) no se define aparte, sino que se crea al instante. Este concepto es conocido como función anónima y se ve así:
fetch("https://google.com").then(function(res){// abrimos la función anónima// aquí el código de la funciónif(res.ok){ console.log("¡Todo bien!");}})// el corchete cierra la función, el paréntesis cierra al .then
Este concepto es oro en polvo, son las promesas de JavaScript, así que les invito a investigar sobre ello.
acabo de ver que puse a la función el nombre decirHola pero en ningún momento dice hola jasrtjajsrjls ignoren eso
Igual se entiende muy bien. ¡Muchas gracias!
Estoy viendo que ya vamos por la clase 76, a este punto muchas personas de las que comenzaron, no llegan, se dan cuenta que tal vez no es lo de ellos o x razones. pero aprovecho para felicitarnos por haber llegado a este punto y yo solo digo... "no te acabes cursoooo!!!! " jajajaja
Por muchos momentos el curso tomó muchas cosas avanzadas que hicieron retirarse a muchas personas, pero los que llegamos hasta acá ya tenemos que terminar.
Yo estoy y no estoy porque sigo aquí pero mi código está roto😐
No olviden que el objeto "Class Jugador" se escribe con la J mayúscula, por ese error no pude avanzar y perdí tiempo, un saludo, espero les sirva.
lo mismo me sucede, estuve un **ratote ** en eso xd
Estuve un rato sin avanzar por ese pequeño detalle
cuando estén en la parte de poner ${Math.random} asegúrense que son las comillas EXACTAS que son estas: ``
se las dejo para que las copien o si no con el comando Ctrl + alt + (la tecla que tenga la comilla), ya que yo estuve como media hora para encontrar el error y eran esas comillas xd
me di cuenta de eso , lo que no me acordaba era como las tipeaba
yO las pongo con Alt + 96
La verdad uno queda loco....
El asunto radica en que no se nos explica realmente la finalidad de lo que hacemos, muestran todo el procedimiento pero hasta ahi.
si empezaran por mostrar que es lo que se busca con los que haremos quiza uno tendria mejor asociación con los conceptos
Completamente de acuerdo
Por si les causan dudas los .then
fetch(url) hace un GET (una petición para obtener algo) a la URL que se le especifique
Esta función nos retornará algo (lo que sea que se haya definido en el código del servidor).
No podemos trabajar con lo que nos retorne directamente, ya que el servidor se tomará un tiempo en responder.
Para eso utilizaremos el .then(func), que ejecutará el código de la función que le demos (en este caso, func), pasándole la respuesta del servidor como parámetro.
El .then suele ir por debajo de la función que hayamos llamado (fetch en este caso) e indentado, por pura estética nada más. Nótese que se puede hacer fetch(url).then(func) sin dejar ningún espacio.
Así, un ejemplo de código podría ser:
Este código enviaría un request a https://google.com y, una vez tuviera una respuesta del servidor, haría decirHola(respuesta), siendo respuesta la respuesta que haya dado el servidor de esa URL.
Lo que pasa es que muchas veces la función que usamos (en este caso decirHola) no se define aparte, sino que se crea al instante. Este concepto es conocido como función anónima y se ve así:
fetch("https://google.com").then(function(res){// abrimos la función anónima// aquí el código de la funciónif(res.ok){console.log("¡Todo bien!");}})// el corchete cierra la función, el paréntesis cierra al .then
Este concepto es oro en polvo, son las promesas de JavaScript, así que les invito a investigar sobre ello.
Acabo de ver que puse a la función el nombre decirHola pero en ningún momento dice hola jasrtjajsrjls ignoren eso
jajajaja.pasa...
Para que ello no pase,tocara aprender Docker
Me paso que habia cerrado todo al terminar la clase pasada, al abrirlo de nuevo quice seguir con el contro + c del sgundo 50 y continuar a la par, no lo logre por que debia ubicarme de nuevo en la carpeta donde tengo mis archivos, tal cual como el inicio del video pasado, dejo el aportesito por si a alguien mas le pasa, casi no doy con el chiste
Así es. A mi me pasa que a veces abro la tapa y continuo desde donde lo dejé pero tengo que reactivar el Live Server manualmente para que refresque automáticamente los cambios.
Esta información puede salvarme mucho tiempo jaja
Si no os sale el console.log() en la pagina del html aseguraos que cuando llamáis la función unirseAlJuego() tengáis puestos los paréntesis ()
Que tengan un buen día 🎈
Hola, a mi no me funciona el console.log() en la pagina, ya verifique los parentesis, aqui el codigo.
Hola Jhon! Viendo tu código no veo ningún error en mokepon.js. Algo que me pasó a mí fue que tuve que traer la librería cors en este paso y cuando la invoqué (en index.js) olvidé los paréntesis y ni siquiera se generaba el id.
Escribí => app.use(cors)
Debía ser => app.use(cors())
Ojalá esto te ayude!!
Yo dandome cuenta que aun está ahí el typo del profe Diego, bueno creo que el fue, que colocó Mokepono, en lugar de Mokepon.
Jajajaja es su legado, su marca personal.
Les quiero contar que había dejado el curso parado y lo he retomado 2 meses después. Es todo un reto retomar pero aquí estoy, necesito terminarlo para poder continuar. Este curso se llama básico pero se que tiene cosas muy avanzadas que seguramente vamos a ver más adelante con mayor detenimiento.
con toda!
me quedo con frontend !!!!
Para posibles futuros errores:
Acordaros de tener el servidor funcionando. Si no lo está, os dará error y no os dará el número de jugador. (30' intentando ver porque no me salía)
Gracias a ti solucione mi problema
No sabía que el res.text y res.json también eran promesas, lol
Me pregunto . que tiene de basico la enseñanza de back end que nos estan dando ? ... jaja yo esperaba explicaciones y enseñanzas basicas , pensando en alguien que de verdad esta partiendo en esto , no creo que esta parte de la enseñanza este pensado en gente que recien comienza . :( la verdad desmotiva un poco que se salten tantos conceptos y que den por hecho que los dominaramos , si veo mucha gente comentando con conocimientos previos pero para alguien que recien parte en la programacion esto es mas desmotivante que motivante en si , por que va todo rapido y con apenas explicacion como si ya los de conocimiento basico lo supieramos , esperaba que aqui es cuando nos explican conceptos basicos o usos de los comandos en forma basica , no por que no quiera avanzar sino que por que primero pensaba que seteariamos las bases , pero veo que todo ya se da por hecho . Frustracion y estar perdido es poco! bueno como sea como dijo alguien por ahi!! vamos que queda poco!! por algo llegamos hasta aqui , solo que aburre un poco y cansa hacer todo copy paste sin entender mucho ni recibir explicaciones contextuales 🤷
Cada vez que me marea una clase una voz de freddy me dice "NO APAGUES EL CEREBRO" XD.
Por si no saben sacar (``) o no lo encuentran... Pueden usar Alt + 96 y ahí les saldrá las comillas :)
¡¡¡Mi héroe!!!
es normal que yo no haya tenido el mismo error en la consola? xD
Hehehe, si tu código es diferente, es posible que sí!
No profe es que ni siquiera me cargan los id de los usuarios en la terminal ni en la consola y el servidor funciona correctamente al igual que las pruebas que hacíamos con el localhost
Por qué en la consola no me genera el id, solo genera un número el de arriba, pero el de abajo no.
¿que sera?
Este es mi primer acercamiento con backend y no me queda claro cuál es la Api. Acaso es fetch en este caso?