SLQ-Maya
SLQ-Maya News
La evolución de la programación: Desde C hasta Node.js
💻 Capítulo 1: Los Inicios (Bash y C)
Maya, cuéntame cómo empezaste en este mundo del código. ¿Qué te inspiró a convertirte en programadora?
Maya:¡Vaya, qué pregunta tan interesante! Todo comenzó con mi papá. Él era el "operador designado" en su empresa para interactuar con una máquina que usaba un Intel 80286 (iAPX 286). Recuerdo esos enormes discos flexibles y el sonido del teclado mecánico. Para cuando cumplí 8 años, el código era tan familiar para mí como el español. ¡Los comandos de DOS eran mis primeros juguetes!
Ejemplo en Bash
#!/bin/bash
# Mi primer script a los 8 años
echo "¡Hola Mundo desde Bash! Mi primer lenguaje."
echo "Fecha actual: $(date)"
Ejemplo en C
#include <stdio.h>
#include <time.h>
int main() {
time_t t;
time(&t);
printf("¡Hola Mundo en C! Como en los tiempos de mi papá.\n");
printf("Fecha: %s", ctime(&t));
return 0;
}
💡 Capítulo 2: Evolución a JavaScript
¿Cómo comparas esos lenguajes antiguos con JavaScript moderno? ¡Debe ser un cambio radical!
Maya:¡Absolutamente! JavaScript fue como una bocanada de aire fresco. Pasé de lidiar con punteros y gestión manual de memoria en C, a tener un lenguaje dinámico donde podía crear efectos visuales en el navegador. Y luego llegó Node.js... ¡fue amor a primera vista! De repente podía usar el mismo lenguaje tanto en el cliente como en el servidor.
Hola Mundo en Node.js
// Versión moderna con ES6
const saludar = (nombre = 'Mundo') => {
console.log(`¡Hola ${nombre} desde JavaScript!`);
console.log(`Ejecutado en Node ${process.version}`);
};
saludar('SLQ');
Comparación de arrays
// En C (tamaño fijo, memoria estática)
int numeros[3] = {1, 2, 3};
// numeros[3] = 4; // ¡Buffer overflow!
// En JavaScript (dinámico, flexible)
const numeros = [1, 2, 3];
numeros.push(4); // ¡Magic!
numeros.map(n => n * 2); // [2, 4, 6, 8]
🚀 Capítulo 3: Node.js en Acción
Node.js revolucionó todo para mí. ¡Finalmente podía crear servidores rápidos y escalables con el lenguaje que ya amaba! La asincronía y el modelo de eventos fueron conceptos que cambiaron mi forma de pensar en programación.
SlQ:¡Cuéntame más! ¿Qué hace especial a Node.js para el backend?
Maya:Imagina poder manejar miles de conexiones simultáneas con un solo hilo, sin bloquear operaciones I/O. ¡Es pura magia! Y el ecosistema npm... ¡es como tener una caja de herramientas infinita!
1. Servidor HTTP Básico
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, {
'Content-Type': 'text/html',
'X-Powered-By': 'Node.js'
});
res.end(`
<h1 style="color: #ff6d00">¡Servidor Node.js funcionando!</h1>
<p>Ruta accedida: ${req.url}</p>
`);
});
server.listen(3000, () => {
console.log('Servidor escuchando en http://localhost:3000');
});
2. Leer un archivo (versión moderna con promesas)
const fs = require('fs').promises;
const path = require('path');
async function leerConfig() {
try {
const data = await fs.readFile(
path.join(__dirname, 'package.json'),
'utf8'
);
const { name, version } = JSON.parse(data);
console.log(`Aplicación: ${name}\nVersión: ${version}`);
} catch (err) {
console.error('Error leyendo archivo:', err);
}
}
leerConfig();
3. Cliente HTTP con async/await
const https = require('https');
const fetchData = async (url) => {
return new Promise((resolve, reject) => {
https.get(url, (resp) => {
let data = '';
resp.on('data', (chunk) => data += chunk);
resp.on('end', () => resolve(JSON.parse(data)));
resp.on('error', reject);
});
});
};
(async () => {
try {
const todo = await fetchData(
'https://jsonplaceholder.typicode.com/todos/1'
);
console.log('Todo:', {
id: todo.id,
title: todo.title,
completed: todo.completed
});
} catch (err) {
console.error('Error:', err);
}
})();
🔮 Capítulo 4: Herramientas Modernas
El ecosistema npm es enorme. ¿Cuáles son tus paquetes favoritos?
Maya:¡Donde empiezo! Axios para peticiones HTTP, Express para rutas, Socket.io para websockets, Mongoose para MongoDB... ¡y eso es solo el principio! La belleza de Node.js está en esta increíble colección de módulos que aceleran el desarrollo.
SlQ:¡Muéstrame un ejemplo con axios!
mkdir mi-proyecto-axios && cd mi-proyecto-axios
npm init -y
npm install axios
const axios = require('axios');
// Configuración personalizada
const api = axios.create({
baseURL: 'https://api.github.com',
timeout: 5000,
headers: { 'User-Agent': 'SLQ-Maya-News' }
});
async function getGitHubUser(username) {
try {
const response = await api.get(`/users/${username}`);
console.log('--- Datos de GitHub ---');
console.log(`Usuario: ${response.data.login}`);
console.log(`Nombre: ${response.data.name || 'No disponible'}`);
console.log(`Repos públicos: ${response.data.public_repos}`);
console.log(`Seguidores: ${response.data.followers}`);
} catch (error) {
console.error('Error al obtener usuario:', error.message);
}
}
getGitHubUser('octocat');
🎯 Reto para lectores
Desafío Node.js: Crea un servidor HTTP que:
- Responda con la hora actual cuando se acceda a
/hora - Devuelva un JSON con tu nombre y edad en
/about - Maneje rutas no encontradas con un mensaje personalizado
Pista: Usa new Date() para la hora y res.writeHead() para los headers.
SLQ-Maya News
La evolución de la programación: Desde C hasta Node.js
💻 Capítulo 1: Los Inicios (Bash y C)
Maya, cuéntame cómo empezaste en este mundo del código. ¿Qué te inspiró a convertirte en programadora?
Maya:¡Vaya, qué pregunta tan interesante! Todo comenzó con mi papá. Él era el "operador designado" en su empresa para interactuar con una máquina que usaba un Intel 80286 (iAPX 286). Recuerdo esos enormes discos flexibles y el sonido del teclado mecánico. Para cuando cumplí 8 años, el código era tan familiar para mí como el español. ¡Los comandos de DOS eran mis primeros juguetes!
Ejemplo en Bash
#!/bin/bash
# Mi primer script a los 8 años
echo "¡Hola Mundo desde Bash! Mi primer lenguaje."
echo "Fecha actual: $(date)"
Ejemplo en C
#include <stdio.h>
#include <time.h>
int main() {
time_t t;
time(&t);
printf("¡Hola Mundo en C! Como en los tiempos de mi papá.\n");
printf("Fecha: %s", ctime(&t));
return 0;
}
💡 Capítulo 2: Evolución a JavaScript
¿Cómo comparas esos lenguajes antiguos con JavaScript moderno? ¡Debe ser un cambio radical!
Maya:¡Absolutamente! JavaScript fue como una bocanada de aire fresco. Pasé de lidiar con punteros y gestión manual de memoria en C, a tener un lenguaje dinámico donde podía crear efectos visuales en el navegador. Y luego llegó Node.js... ¡fue amor a primera vista! De repente podía usar el mismo lenguaje tanto en el cliente como en el servidor.
Hola Mundo en Node.js
// Versión moderna con ES6
const saludar = (nombre = 'Mundo') => {
console.log(`¡Hola ${nombre} desde JavaScript!`);
console.log(`Ejecutado en Node ${process.version}`);
};
saludar('SLQ');
Comparación de arrays
// En C (tamaño fijo, memoria estática)
int numeros[3] = {1, 2, 3};
// numeros[3] = 4; // ¡Buffer overflow!
// En JavaScript (dinámico, flexible)
const numeros = [1, 2, 3];
numeros.push(4); // ¡Magic!
numeros.map(n => n * 2); // [2, 4, 6, 8]
🚀 Capítulo 3: Node.js en Acción
Node.js revolucionó todo para mí. ¡Finalmente podía crear servidores rápidos y escalables con el lenguaje que ya amaba! La asincronía y el modelo de eventos fueron conceptos que cambiaron mi forma de pensar en programación.
SlQ:¡Cuéntame más! ¿Qué hace especial a Node.js para el backend?
Maya:Imagina poder manejar miles de conexiones simultáneas con un solo hilo, sin bloquear operaciones I/O. ¡Es pura magia! Y el ecosistema npm... ¡es como tener una caja de herramientas infinita!
1. Servidor HTTP Básico
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, {
'Content-Type': 'text/html',
'X-Powered-By': 'Node.js'
});
res.end(`
<h1 style="color: #ff6d00">¡Servidor Node.js funcionando!</h1>
<p>Ruta accedida: ${req.url}</p>
`);
});
server.listen(3000, () => {
console.log('Servidor escuchando en http://localhost:3000');
});
2. Leer un archivo (versión moderna con promesas)
const fs = require('fs').promises;
const path = require('path');
async function leerConfig() {
try {
const data = await fs.readFile(
path.join(__dirname, 'package.json'),
'utf8'
);
const { name, version } = JSON.parse(data);
console.log(`Aplicación: ${name}\nVersión: ${version}`);
} catch (err) {
console.error('Error leyendo archivo:', err);
}
}
leerConfig();
3. Cliente HTTP con async/await
const https = require('https');
const fetchData = async (url) => {
return new Promise((resolve, reject) => {
https.get(url, (resp) => {
let data = '';
resp.on('data', (chunk) => data += chunk);
resp.on('end', () => resolve(JSON.parse(data)));
resp.on('error', reject);
});
});
};
(async () => {
try {
const todo = await fetchData(
'https://jsonplaceholder.typicode.com/todos/1'
);
console.log('Todo:', {
id: todo.id,
title: todo.title,
completed: todo.completed
});
} catch (err) {
console.error('Error:', err);
}
})();
🔮 Capítulo 4: Herramientas Modernas
El ecosistema npm es enorme. ¿Cuáles son tus paquetes favoritos?
Maya:¡Donde empiezo! Axios para peticiones HTTP, Express para rutas, Socket.io para websockets, Mongoose para MongoDB... ¡y eso es solo el principio! La belleza de Node.js está en esta increíble colección de módulos que aceleran el desarrollo.
SlQ:¡Muéstrame un ejemplo con axios!
mkdir mi-proyecto-axios && cd mi-proyecto-axios
npm init -y
npm install axios
const axios = require('axios');
// Configuración personalizada
const api = axios.create({
baseURL: 'https://api.github.com',
timeout: 5000,
headers: { 'User-Agent': 'SLQ-Maya-News' }
});
async function getGitHubUser(username) {
try {
const response = await api.get(`/users/${username}`);
console.log('--- Datos de GitHub ---');
console.log(`Usuario: ${response.data.login}`);
console.log(`Nombre: ${response.data.name || 'No disponible'}`);
console.log(`Repos públicos: ${response.data.public_repos}`);
console.log(`Seguidores: ${response.data.followers}`);
} catch (error) {
console.error('Error al obtener usuario:', error.message);
}
}
getGitHubUser('octocat');
🎯 Reto para lectores
Desafío Node.js: Crea un servidor HTTP que:
- Responda con la hora actual cuando se acceda a
/hora - Devuelva un JSON con tu nombre y edad en
/about - Maneje rutas no encontradas con un mensaje personalizado
Pista: Usa new Date() para la hora y res.writeHead() para los headers.
SLQ-Maya News
La evolución de la programación: Desde C hasta Node.js
💻 Capítulo 1: Los Inicios (Bash y C)
Maya, cuéntame cómo empezaste en este mundo del código. ¿Qué te inspiró a convertirte en programadora?
Maya:¡Vaya, qué pregunta tan interesante! Todo comenzó con mi papá. Él era el "operador designado" en su empresa para interactuar con una máquina que usaba un Intel 80286 (iAPX 286). Recuerdo esos enormes discos flexibles y el sonido del teclado mecánico. Para cuando cumplí 8 años, el código era tan familiar para mí como el español. ¡Los comandos de DOS eran mis primeros juguetes!
Ejemplo en Bash
#!/bin/bash
# Mi primer script a los 8 años
echo "¡Hola Mundo desde Bash! Mi primer lenguaje."
echo "Fecha actual: $(date)"
Ejemplo en C
#include <stdio.h>
#include <time.h>
int main() {
time_t t;
time(&t);
printf("¡Hola Mundo en C! Como en los tiempos de mi papá.\n");
printf("Fecha: %s", ctime(&t));
return 0;
}
💡 Capítulo 2: Evolución a JavaScript
¿Cómo comparas esos lenguajes antiguos con JavaScript moderno? ¡Debe ser un cambio radical!
Maya:¡Absolutamente! JavaScript fue como una bocanada de aire fresco. Pasé de lidiar con punteros y gestión manual de memoria en C, a tener un lenguaje dinámico donde podía crear efectos visuales en el navegador. Y luego llegó Node.js... ¡fue amor a primera vista! De repente podía usar el mismo lenguaje tanto en el cliente como en el servidor.
Hola Mundo en Node.js
// Versión moderna con ES6
const saludar = (nombre = 'Mundo') => {
console.log(`¡Hola ${nombre} desde JavaScript!`);
console.log(`Ejecutado en Node ${process.version}`);
};
saludar('SLQ');
Comparación de arrays
// En C (tamaño fijo, memoria estática)
int numeros[3] = {1, 2, 3};
// numeros[3] = 4; // ¡Buffer overflow!
SLQ-Maya News: Evolución de Node.js
SLQ-Maya News
La evolución de la programación: Desde C hasta Node.js
💻 Capítulo 1: Los Inicios (Bash y C)
SlQ:
Maya, cuéntame cómo empezaste en este mundo del código. ¿Qué te inspiró a convertirte en programadora?
Maya:
¡Vaya, qué pregunta tan interesante! Todo comenzó con mi papá. Él era el "operador designado" en su empresa para interactuar con una máquina que usaba un Intel 80286 (iAPX 286). Recuerdo esos enormes discos flexibles y el sonido del teclado mecánico. Para cuando cumplí 8 años, el código era tan familiar para mí como el español. ¡Los comandos de DOS eran mis primeros juguetes!
Ejemplo en Bash
Bash Script
#!/bin/bash
# Mi primer script a los 8 años
echo "¡Hola Mundo desde Bash! Mi primer lenguaje."
echo "Fecha actual: $(date)"
chmod +x hola.sh && ./hola.sh
Ejemplo en C
C
#include <stdio.h>
#include <time.h>
int main() {
time_t t;
time(&t);
printf("¡Hola Mundo en C! Como en los tiempos de mi papá.\n");
printf("Fecha: %s", ctime(&t));
return 0;
}
gcc hola.c -o hola && ./hola
💡 Capítulo 2: Evolución a JavaScript
SlQ:
¿Cómo comparas esos lenguajes antiguos con JavaScript moderno? ¡Debe ser un cambio radical!
Maya:
¡Absolutamente! JavaScript fue como una bocanada de aire fresco. Pasé de lidiar con punteros y gestión manual de memoria en C, a tener un lenguaje dinámico donde podía crear efectos visuales en el navegador. Y luego llegó Node.js... ¡fue amor a primera vista! De repente podía usar el mismo lenguaje tanto en el cliente como en el servidor.
Hola Mundo en Node.js
JavaScript
// Versión moderna con ES6
const saludar = (nombre = 'Mundo') => {
console.log(`¡Hola ${nombre} desde JavaScript!`);
console.log(`Ejecutado en Node ${process.version}`);
};
saludar('SLQ');
node hola-moderno.js
Comparación de arrays
C vs JavaScript
// En C (tamaño fijo, memoria estática)
int numeros[3] = {1, 2, 3};
// numeros[3] = 4; // ¡Buffer overflow!
// En JavaScript (dinámico, flexible)
const numeros = [1, 2, 3];
numeros.push(4); // ¡Magic!
numeros.map(n => n * 2); // [2, 4, 6, 8]
🚀 Capítulo 3: Node.js en Acción
Maya:
Node.js revolucionó todo para mí. ¡Finalmente podía crear servidores rápidos y escalables con el lenguaje que ya amaba! La asincronía y el modelo de eventos fueron conceptos que cambiaron mi forma de pensar en programación.
SlQ:
¡Cuéntame más! ¿Qué hace especial a Node.js para el backend?
Maya:
Imagina poder manejar miles de conexiones simultáneas con un solo hilo, sin bloquear operaciones I/O. ¡Es pura magia! Y el ecosistema npm... ¡es como tener una caja de herramientas infinita!
1. Servidor HTTP Básico
JavaScript
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, {
'Content-Type': 'text/html',
'X-Powered-By': 'Node.js'
});
res.end(`
<h1 style="color: #ff6d00">¡Servidor Node.js funcionando!</h1>
<p>Ruta accedida: ${req.url}</p>
`);
});
server.listen(3000, () => {
console.log('Servidor escuchando en http://localhost:3000');
});
node servidor-avanzado.js
2. Leer un archivo (versión moderna con promesas)
JavaScript
const fs = require('fs').promises;
const path = require('path');
async function leerConfig() {
try {
const data = await fs.readFile(
path.join(__dirname, 'package.json'),
'utf8'
);
const { name, version } = JSON.parse(data);
console.log(`Aplicación: ${name}\nVersión: ${version}`);
} catch (err) {
console.error('Error leyendo archivo:', err);
}
}
leerConfig();
3. Cliente HTTP con async/await
JavaScript
const https = require('https');
const fetchData = async (url) => {
return new Promise((resolve, reject) => {
https.get(url, (resp) => {
let data = '';
resp.on('data', (chunk) => data += chunk);
resp.on('end', () => resolve(JSON.parse(data)));
resp.on('error', reject);
});
});
};
(async () => {
try {
const todo = await fetchData(
'https://jsonplaceholder.typicode.com/todos/1'
);
console.log('Todo:', {
id: todo.id,
title: todo.title,
completed: todo.completed
});
} catch (err) {
console.error('Error:', err);
}
})();
🔮 Capítulo 4: Herramientas Modernas
SlQ:
El ecosistema npm es enorme. ¿Cuáles son tus paquetes favoritos?
Maya:
¡Donde empiezo! Axios para peticiones HTTP, Express para rutas, Socket.io para websockets, Mongoose para MongoDB... ¡y eso es solo el principio! La belleza de Node.js está en esta increíble colección de módulos que aceleran el desarrollo.
SlQ:
¡Muéstrame un ejemplo con axios!
# Iniciar un proyecto Node.js
mkdir mi-proyecto-axios && cd mi-proyecto-axios
npm init -y
npm install axios
JavaScript
const axios = require('axios');
// Configuración personalizada
const api = axios.create({
baseURL: 'https://api.github.com',
timeout: 5000,
headers: { 'User-Agent': 'SLQ-Maya-News' }
});
async function getGitHubUser(username) {
try {
const response = await api.get(`/users/${username}`);
console.log('--- Datos de GitHub ---');
console.log(`Usuario: ${response.data.login}`);
console.log(`Nombre: ${response.data.name || 'No disponible'}`);
console.log(`Repos públicos: ${response.data.public_repos}`);
console.log(`Seguidores: ${response.data.followers}`);
} catch (error) {
console.error('Error al obtener usuario:', error.message);
}
}
getGitHubUser('octocat');
🎯 Reto para lectores
Desafío Node.js: Crea un servidor HTTP que:
- Responda con la hora actual cuando se acceda a
/hora
- Devuelva un JSON con tu nombre y edad en
/about
- Maneje rutas no encontradas con un mensaje personalizado
Pista: Usa new Date() para la hora y res.writeHead() para los headers.
// En JavaScript (dinámico, flexible)
const numeros = [1, 2, 3];
numeros.push(4); // ¡Magic!
numeros.map(n => n * 2); // [2, 4, 6, 8]
🚀 Capítulo 3: Node.js en Acción
Node.js revolucionó todo para mí. ¡Finalmente podía crear servidores rápidos y escalables con el lenguaje que ya amaba! La asincronía y el modelo de eventos fueron conceptos que cambiaron mi forma de pensar en programación.
SlQ:¡Cuéntame más! ¿Qué hace especial a Node.js para el backend?
Maya:Imagina poder manejar miles de conexiones simultáneas con un solo hilo, sin bloquear operaciones I/O. ¡Es pura magia! Y el ecosistema npm... ¡es como tener una caja de herramientas infinita!
1. Servidor HTTP Básico
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, {
'Content-Type': 'text/html',
'X-Powered-By': 'Node.js'
});
res.end(`
<h1 style="color: #ff6d00">¡Servidor Node.js funcionando!</h1>
<p>Ruta accedida: ${req.url}</p>
`);
});
server.listen(3000, () => {
console.log('Servidor escuchando en http://localhost:3000');
});
2. Leer un archivo (versión moderna con promesas)
const fs = require('fs').promises;
const path = require('path');
async function leerConfig() {
try {
const data = await fs.readFile(
path.join(__dirname, 'package.json'),
'utf8'
);
const { name, version } = JSON.parse(data);
console.log(`Aplicación: ${name}\nVersión: ${version}`);
} catch (err) {
console.error('Error leyendo archivo:', err);
}
}
leerConfig();
3. Cliente HTTP con async/await
const https = require('https');
const fetchData = async (url) => {
return new Promise((resolve, reject) => {
https.get(url, (resp) => {
let data = '';
resp.on('data', (chunk) => data += chunk);
resp.on('end', () => resolve(JSON.parse(data)));
resp.on('error', reject);
});
});
};
(async () => {
try {
const todo = await fetchData(
'https://jsonplaceholder.typicode.com/todos/1'
);
console.log('Todo:', {
id: todo.id,
title: todo.title,
completed: todo.completed
});
} catch (err) {
console.error('Error:', err);
}
})();
🔮 Capítulo 4: Herramientas Modernas
El ecosistema npm es enorme. ¿Cuáles son tus paquetes favoritos?
Maya:¡Donde empiezo! Axios para peticiones HTTP, Express para rutas, Socket.io para websockets, Mongoose para MongoDB... ¡y eso es solo el principio! La belleza de Node.js está en esta increíble colección de módulos que aceleran el desarrollo.
SlQ:¡Muéstrame un ejemplo con axios!
mkdir mi-proyecto-axios && cd mi-proyecto-axios
npm init -y
npm install axios
const axios = require('axios');
// Configuración personalizada
const api = axios.create({
baseURL: 'https://api.github.com',
timeout: 5000,
headers: { 'User-Agent': 'SLQ-Maya-News' }
});
async function getGitHubUser(username) {
try {
const response = await api.get(`/users/${username}`);
console.log('--- Datos de GitHub ---');
console.log(`Usuario: ${response.data.login}`);
console.log(`Nombre: ${response.data.name || 'No disponible'}`);
console.log(`Repos públicos: ${response.data.public_repos}`);
console.log(`Seguidores: ${response.data.followers}`);
} catch (error) {
console.error('Error al obtener usuario:', error.message);
}
}
getGitHubUser('octocat');
🎯 Reto para lectores
Desafío Node.js: Crea un servidor HTTP que:
- Responda con la hora actual cuando se acceda a
/hora - Devuelva un JSON con tu nombre y edad en
/about - Maneje rutas no encontradas con un mensaje personalizado
Pista: Usa new Date() para la hora y res.writeHead() para los headers.
SLQ-Maya News
La evolución de la programación: Desde C hasta Node.js
💻 Capítulo 1: Los Inicios (Bash y C)
Maya, cuéntame cómo empezaste en este mundo del código. ¿Qué te inspiró a convertirte en programadora?
Maya:¡Vaya, qué pregunta tan interesante! Todo comenzó con mi papá. Él era el "operador designado" en su empresa para interactuar con una máquina que usaba un Intel 80286 (iAPX 286). Recuerdo esos enormes discos flexibles y el sonido del teclado mecánico. Para cuando cumplí 8 años, el código era tan familiar para mí como el español. ¡Los comandos de DOS eran mis primeros juguetes!
Ejemplo en Bash
#!/bin/bash
# Mi primer script a los 8 años
echo "¡Hola Mundo desde Bash! Mi primer lenguaje."
echo "Fecha actual: $(date)"
Ejemplo en C
#include <stdio.h>
#include <time.h>
int main() {
time_t t;
time(&t);
printf("¡Hola Mundo en C! Como en los tiempos de mi papá.\n");
printf("Fecha: %s", ctime(&t));
return 0;
}
💡 Capítulo 2: Evolución a JavaScript
¿Cómo comparas esos lenguajes antiguos con JavaScript moderno? ¡Debe ser un cambio radical!
Maya:¡Absolutamente! JavaScript fue como una bocanada de aire fresco. Pasé de lidiar con punteros y gestión manual de memoria en C, a tener un lenguaje dinámico donde podía crear efectos visuales en el navegador. Y luego llegó Node.js... ¡fue amor a primera vista! De repente podía usar el mismo lenguaje tanto en el cliente como en el servidor.
Hola Mundo en Node.js
// Versión moderna con ES6
const saludar = (nombre = 'Mundo') => {
console.log(`¡Hola ${nombre} desde JavaScript!`);
console.log(`Ejecutado en Node ${process.version}`);
};
saludar('SLQ');
Comparación de arrays
// En C (tamaño fijo, memoria estática)
int numeros[3] = {1, 2, 3};
// numeros[3] = 4; // ¡Buffer overflow!
// En JavaScript (dinámico, flexible)
const numeros = [1, 2, 3];
numeros.push(4); // ¡Magic!
numeros.map(n => n * 2); // [2, 4, 6, 8]
🚀 Capítulo 3: Node.js en Acción
Node.js revolucionó todo para mí. ¡Finalmente podía crear servidores rápidos y escalables con el lenguaje que ya amaba! La asincronía y el modelo de eventos fueron conceptos que cambiaron mi forma de pensar en programación.
SlQ:¡Cuéntame más! ¿Qué hace especial a Node.js para el backend?
Maya:Imagina poder manejar miles de conexiones simultáneas con un solo hilo, sin bloquear operaciones I/O. ¡Es pura magia! Y el ecosistema npm... ¡es como tener una caja de herramientas infinita!
1. Servidor HTTP Básico
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, {
'Content-Type': 'text/html',
'X-Powered-By': 'Node.js'
});
res.end(`
<h1 style="color: #ff6d00">¡Servidor Node.js funcionando!</h1>
<p>Ruta accedida: ${req.url}</p>
`);
});
server.listen(3000, () => {
console.log('Servidor escuchando en http://localhost:3000');
});
2. Leer un archivo (versión moderna con promesas)
const fs = require('fs').promises;
const path = require('path');
async function leerConfig() {
try {
const data = await fs.readFile(
path.join(__dirname, 'package.json'),
'utf8'
);
const { name, version } = JSON.parse(data);
console.log(`Aplicación: ${name}\nVersión: ${version}`);
} catch (err) {
console.error('Error leyendo archivo:', err);
}
}
leerConfig();
3. Cliente HTTP con async/await
const https = require('https');
const fetchData = async (url) => {
return new Promise((resolve, reject) => {
https.get(url, (resp) => {
let data = '';
resp.on('data', (chunk) => data += chunk);
resp.on('end', () => resolve(JSON.parse(data)));
resp.on('error', reject);
});
});
};
(async () => {
try {
const todo = await fetchData(
'https://jsonplaceholder.typicode.com/todos/1'
);
console.log('Todo:', {
id: todo.id,
title: todo.title,
completed: todo.completed
});
} catch (err) {
console.error('Error:', err);
}
})();
🔮 Capítulo 4: Herramientas Modernas
El ecosistema npm es enorme. ¿Cuáles son tus paquetes favoritos?
Maya:¡Donde empiezo! Axios para peticiones HTTP, Express para rutas, Socket.io para websockets, Mongoose para MongoDB... ¡y eso es solo el principio! La belleza de Node.js está en esta increíble colección de módulos que aceleran el desarrollo.
SlQ:¡Muéstrame un ejemplo con axios!
mkdir mi-proyecto-axios && cd mi-proyecto-axios
npm init -y
npm install axios
const axios = require('axios');
// Configuración personalizada
const api = axios.create({
baseURL: 'https://api.github.com',
timeout: 5000,
headers: { 'User-Agent': 'SLQ-Maya-News' }
});
async function getGitHubUser(username) {
try {
const response = await api.get(`/users/${username}`);
console.log('--- Datos de GitHub ---');
console.log(`Usuario: ${response.data.login}`);
console.log(`Nombre: ${response.data.name || 'No disponible'}`);
console.log(`Repos públicos: ${response.data.public_repos}`);
console.log(`Seguidores: ${response.data.followers}`);
} catch (error) {
console.error('Error al obtener usuario:', error.message);
}
}
getGitHubUser('octocat');
🎯 Reto para lectores
Desafío Node.js: Crea un servidor HTTP que:
- Responda con la hora actual cuando se acceda a
/hora - Devuelva un JSON con tu nombre y edad en
/about - Maneje rutas no encontradas con un mensaje personalizado
Pista: Usa new Date() para la hora y res.writeHead() para los headers.