Skip to content

Commit d5ce0a5

Browse files
committed
#20 - javascript
1 parent e28add1 commit d5ce0a5

File tree

1 file changed

+123
-0
lines changed

1 file changed

+123
-0
lines changed
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
// Se requiere el módulo 'node-fetch' para realizar peticiones HTTP en Node.js
2+
// Instalar con: npm install node-fetch
3+
const fetch = require("node-fetch");
4+
const readline = require("readline");
5+
6+
/**
7+
* Teoría sobre peticiones HTTP en JavaScript:
8+
*
9+
* En JavaScript moderno, podemos realizar peticiones HTTP de varias formas:
10+
* 1. Fetch API (nativo en navegadores, requiere módulo en Node.js)
11+
* 2. XMLHttpRequest (método más antiguo)
12+
* 3. Bibliotecas como axios
13+
*
14+
* La Fetch API utiliza Promesas, lo que permite un código más limpio y
15+
* manejo asíncrono más sencillo usando async/await.
16+
*
17+
* Conceptos clave:
18+
* - async/await: Permite escribir código asíncrono que parece síncrono
19+
* - try/catch: Maneja errores en operaciones asíncronas
20+
* - JSON: Formato común para intercambiar datos en la web
21+
*/
22+
23+
// Configuración de readline para entrada/salida en consola
24+
const rl = readline.createInterface({
25+
input: process.stdin,
26+
output: process.stdout,
27+
});
28+
29+
// Función para realizar preguntas al usuario y obtener respuesta
30+
const pregunta = (pregunta) => {
31+
return new Promise((resolve) => {
32+
rl.question(pregunta, resolve);
33+
});
34+
};
35+
36+
// Función para realizar petición HTTP
37+
async function hacerPeticionHttp(url) {
38+
try {
39+
const respuesta = await fetch(url);
40+
if (!respuesta.ok) {
41+
throw new Error(`HTTP error! status: ${respuesta.status}`);
42+
}
43+
return await respuesta.json();
44+
} catch (error) {
45+
throw new Error(`Error al realizar la petición: ${error.message}`);
46+
}
47+
}
48+
49+
// Función para mostrar la cadena de evolución
50+
function mostrarCadenaEvolucion(cadena, nivel = 0) {
51+
const indentacion = " ".repeat(nivel);
52+
console.log(`${indentacion}- ${cadena.species.name}`);
53+
54+
if (cadena.evolves_to.length > 0) {
55+
for (const evolucion of cadena.evolves_to) {
56+
mostrarCadenaEvolucion(evolucion, nivel + 1);
57+
}
58+
}
59+
}
60+
61+
// Función principal que ejecuta el programa
62+
async function main() {
63+
console.log("=== Ejemplo básico de petición HTTP ===");
64+
try {
65+
const ejemploData = await hacerPeticionHttp("https://www.example.com");
66+
console.log("Petición exitosa a example.com");
67+
} catch (error) {
68+
console.error(error.message);
69+
}
70+
71+
while (true) {
72+
console.log("\n=== Búsqueda de Pokémon ===");
73+
const entrada = await pregunta(
74+
"Ingrese el nombre o número del Pokémon (o 'salir' para terminar): "
75+
);
76+
77+
if (entrada.toLowerCase() === "salir") {
78+
break;
79+
}
80+
81+
try {
82+
// Obtener datos básicos del Pokémon
83+
const pokemonData = await hacerPeticionHttp(
84+
`https://pokeapi.co/api/v2/pokemon/${entrada.toLowerCase()}`
85+
);
86+
87+
console.log("\nInformación del Pokémon:");
88+
console.log(`Nombre: ${pokemonData.name}`);
89+
console.log(`ID: ${pokemonData.id}`);
90+
console.log(`Peso: ${pokemonData.weight / 10} kg`);
91+
console.log(`Altura: ${pokemonData.height / 10} m`);
92+
93+
console.log("Tipos:");
94+
pokemonData.types.forEach((tipo) => {
95+
console.log(`- ${tipo.type.name}`);
96+
});
97+
98+
// Obtener y mostrar cadena de evolución
99+
const speciesData = await hacerPeticionHttp(pokemonData.species.url);
100+
const evolutionData = await hacerPeticionHttp(
101+
speciesData.evolution_chain.url
102+
);
103+
104+
console.log("\nCadena de evolución:");
105+
mostrarCadenaEvolucion(evolutionData.chain);
106+
107+
// Mostrar juegos
108+
console.log("\nJuegos en los que aparece:");
109+
pokemonData.game_indices.forEach((juego) => {
110+
console.log(`- ${juego.version.name}`);
111+
});
112+
} catch (error) {
113+
console.error(
114+
"Error: No se pudo encontrar el Pokémon. Asegúrese de escribir el nombre o número correctamente."
115+
);
116+
}
117+
}
118+
119+
rl.close();
120+
}
121+
122+
// Ejecutar el programa
123+
main().catch(console.error);

0 commit comments

Comments
 (0)