Menu iconMenu icon
JavaScript de Cero a Superhéroe

Capítulo 11: JavaScript y el Servidor

Ejercicios Prácticos para el Capítulo 11: JavaScript y el Servidor

Estos ejercicios prácticos están diseñados para reforzar tu comprensión de los conceptos discutidos en el Capítulo 11, enfocándose en Node.js, la construcción de APIs REST con Express, y la implementación de comunicación en tiempo real usando WebSockets. Al completar estos ejercicios, ganarás experiencia práctica con JavaScript del lado del servidor, mejorando tu capacidad para desarrollar aplicaciones web dinámicas e interactivas.

Ejercicio 1: Servidor Node.js Básico

Objetivo: Crear un servidor Node.js simple que responda con "¡Hola, Node.js!" para cualquier solicitud.

Solución:

// Create a file named server.js
const http = require('http');

const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Hello, Node.js!');
});

const port = 3000;
server.listen(port, () => {
    console.log(`Server running at <http://localhost>:${port}/`);
});

Ejecuta este servidor con node server.js y navega a http://localhost:3000 en tu navegador para ver la respuesta.

Ejercicio 2: Construyendo una API REST Simple con Express

Objetivo: Crear una aplicación Express que gestione una lista de tareas, soportando operaciones para crear, leer, actualizar y eliminar tareas.

Solución:

const express = require('express');
const app = express();
app.use(express.json()); // Middleware to parse JSON bodies

let tasks = [{ id: 1, task: 'Do laundry' }, { id: 2, task: 'Write code' }];

app.get('/tasks', (req, res) => {
    res.status(200).json(tasks);
});

app.post('/tasks', (req, res) => {
    const newTask = { id: tasks.length + 1, task: req.body.task };
    tasks.push(newTask);
    res.status(201).json(newTask);
});

app.put('/tasks/:id', (req, res) => {
    let task = tasks.find(t => t.id === parseInt(req.params.id));
    if (!task) res.status(404).send('Task not found');
    else {
        task.task = req.body.task;
        res.status(200).json(task);
    }
});

app.delete('/tasks/:id', (req, res) => {
    tasks = tasks.filter(t => t.id !== parseInt(req.params.id));
    res.status(204).send();
});

const port = 3000;
app.listen(port, () => {
    console.log(`Server running on <http://localhost>:${port}`);
});

Ejercicio 3: Aplicación de Chat en Tiempo Real con WebSockets

Objetivo: Implementar una aplicación de chat simple en tiempo real utilizando WebSockets.

Solución:

// Server setup (server.js)
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) {
    ws.on('message', function incoming(message) {
        console.log('received: %s', message);
        wss.clients.forEach(function each(client) {
            if (client !== ws && client.readyState === WebSocket.OPEN) {
                client.send(message);
            }
        });
    });
});

HTML del Cliente (index.html):

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Chat</title>
</head>
<body>
    <textarea id="messages" cols="30" rows="10" readonly></textarea><br>
    <input type="text" id="messageBox" autocomplete="off"><button onclick="sendMessage()">Send</button>

    <script>
        const ws = new WebSocket('ws://localhost:8080');
        const messages = document.getElementById('messages');

        ws.onmessage = function (event) {
            messages.value += event.data + '\\n';
        };

        function sendMessage() {
            const messageBox = document.getElementById('messageBox');
            ws.send(messageBox.value);
            messageBox.value = '';
        }
    </script>
</body>
</html>

Estos ejercicios ofrecen una forma práctica de aplicar las habilidades de JavaScript del lado del servidor que has aprendido en este capítulo. Desde configurar servidores básicos y crear servicios RESTful hasta implementar sistemas sofisticados de comunicación en tiempo real, ahora tienes las herramientas para construir aplicaciones web robustas, eficientes e interactivas.

Ejercicios Prácticos para el Capítulo 11: JavaScript y el Servidor

Estos ejercicios prácticos están diseñados para reforzar tu comprensión de los conceptos discutidos en el Capítulo 11, enfocándose en Node.js, la construcción de APIs REST con Express, y la implementación de comunicación en tiempo real usando WebSockets. Al completar estos ejercicios, ganarás experiencia práctica con JavaScript del lado del servidor, mejorando tu capacidad para desarrollar aplicaciones web dinámicas e interactivas.

Ejercicio 1: Servidor Node.js Básico

Objetivo: Crear un servidor Node.js simple que responda con "¡Hola, Node.js!" para cualquier solicitud.

Solución:

// Create a file named server.js
const http = require('http');

const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Hello, Node.js!');
});

const port = 3000;
server.listen(port, () => {
    console.log(`Server running at <http://localhost>:${port}/`);
});

Ejecuta este servidor con node server.js y navega a http://localhost:3000 en tu navegador para ver la respuesta.

Ejercicio 2: Construyendo una API REST Simple con Express

Objetivo: Crear una aplicación Express que gestione una lista de tareas, soportando operaciones para crear, leer, actualizar y eliminar tareas.

Solución:

const express = require('express');
const app = express();
app.use(express.json()); // Middleware to parse JSON bodies

let tasks = [{ id: 1, task: 'Do laundry' }, { id: 2, task: 'Write code' }];

app.get('/tasks', (req, res) => {
    res.status(200).json(tasks);
});

app.post('/tasks', (req, res) => {
    const newTask = { id: tasks.length + 1, task: req.body.task };
    tasks.push(newTask);
    res.status(201).json(newTask);
});

app.put('/tasks/:id', (req, res) => {
    let task = tasks.find(t => t.id === parseInt(req.params.id));
    if (!task) res.status(404).send('Task not found');
    else {
        task.task = req.body.task;
        res.status(200).json(task);
    }
});

app.delete('/tasks/:id', (req, res) => {
    tasks = tasks.filter(t => t.id !== parseInt(req.params.id));
    res.status(204).send();
});

const port = 3000;
app.listen(port, () => {
    console.log(`Server running on <http://localhost>:${port}`);
});

Ejercicio 3: Aplicación de Chat en Tiempo Real con WebSockets

Objetivo: Implementar una aplicación de chat simple en tiempo real utilizando WebSockets.

Solución:

// Server setup (server.js)
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) {
    ws.on('message', function incoming(message) {
        console.log('received: %s', message);
        wss.clients.forEach(function each(client) {
            if (client !== ws && client.readyState === WebSocket.OPEN) {
                client.send(message);
            }
        });
    });
});

HTML del Cliente (index.html):

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Chat</title>
</head>
<body>
    <textarea id="messages" cols="30" rows="10" readonly></textarea><br>
    <input type="text" id="messageBox" autocomplete="off"><button onclick="sendMessage()">Send</button>

    <script>
        const ws = new WebSocket('ws://localhost:8080');
        const messages = document.getElementById('messages');

        ws.onmessage = function (event) {
            messages.value += event.data + '\\n';
        };

        function sendMessage() {
            const messageBox = document.getElementById('messageBox');
            ws.send(messageBox.value);
            messageBox.value = '';
        }
    </script>
</body>
</html>

Estos ejercicios ofrecen una forma práctica de aplicar las habilidades de JavaScript del lado del servidor que has aprendido en este capítulo. Desde configurar servidores básicos y crear servicios RESTful hasta implementar sistemas sofisticados de comunicación en tiempo real, ahora tienes las herramientas para construir aplicaciones web robustas, eficientes e interactivas.

Ejercicios Prácticos para el Capítulo 11: JavaScript y el Servidor

Estos ejercicios prácticos están diseñados para reforzar tu comprensión de los conceptos discutidos en el Capítulo 11, enfocándose en Node.js, la construcción de APIs REST con Express, y la implementación de comunicación en tiempo real usando WebSockets. Al completar estos ejercicios, ganarás experiencia práctica con JavaScript del lado del servidor, mejorando tu capacidad para desarrollar aplicaciones web dinámicas e interactivas.

Ejercicio 1: Servidor Node.js Básico

Objetivo: Crear un servidor Node.js simple que responda con "¡Hola, Node.js!" para cualquier solicitud.

Solución:

// Create a file named server.js
const http = require('http');

const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Hello, Node.js!');
});

const port = 3000;
server.listen(port, () => {
    console.log(`Server running at <http://localhost>:${port}/`);
});

Ejecuta este servidor con node server.js y navega a http://localhost:3000 en tu navegador para ver la respuesta.

Ejercicio 2: Construyendo una API REST Simple con Express

Objetivo: Crear una aplicación Express que gestione una lista de tareas, soportando operaciones para crear, leer, actualizar y eliminar tareas.

Solución:

const express = require('express');
const app = express();
app.use(express.json()); // Middleware to parse JSON bodies

let tasks = [{ id: 1, task: 'Do laundry' }, { id: 2, task: 'Write code' }];

app.get('/tasks', (req, res) => {
    res.status(200).json(tasks);
});

app.post('/tasks', (req, res) => {
    const newTask = { id: tasks.length + 1, task: req.body.task };
    tasks.push(newTask);
    res.status(201).json(newTask);
});

app.put('/tasks/:id', (req, res) => {
    let task = tasks.find(t => t.id === parseInt(req.params.id));
    if (!task) res.status(404).send('Task not found');
    else {
        task.task = req.body.task;
        res.status(200).json(task);
    }
});

app.delete('/tasks/:id', (req, res) => {
    tasks = tasks.filter(t => t.id !== parseInt(req.params.id));
    res.status(204).send();
});

const port = 3000;
app.listen(port, () => {
    console.log(`Server running on <http://localhost>:${port}`);
});

Ejercicio 3: Aplicación de Chat en Tiempo Real con WebSockets

Objetivo: Implementar una aplicación de chat simple en tiempo real utilizando WebSockets.

Solución:

// Server setup (server.js)
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) {
    ws.on('message', function incoming(message) {
        console.log('received: %s', message);
        wss.clients.forEach(function each(client) {
            if (client !== ws && client.readyState === WebSocket.OPEN) {
                client.send(message);
            }
        });
    });
});

HTML del Cliente (index.html):

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Chat</title>
</head>
<body>
    <textarea id="messages" cols="30" rows="10" readonly></textarea><br>
    <input type="text" id="messageBox" autocomplete="off"><button onclick="sendMessage()">Send</button>

    <script>
        const ws = new WebSocket('ws://localhost:8080');
        const messages = document.getElementById('messages');

        ws.onmessage = function (event) {
            messages.value += event.data + '\\n';
        };

        function sendMessage() {
            const messageBox = document.getElementById('messageBox');
            ws.send(messageBox.value);
            messageBox.value = '';
        }
    </script>
</body>
</html>

Estos ejercicios ofrecen una forma práctica de aplicar las habilidades de JavaScript del lado del servidor que has aprendido en este capítulo. Desde configurar servidores básicos y crear servicios RESTful hasta implementar sistemas sofisticados de comunicación en tiempo real, ahora tienes las herramientas para construir aplicaciones web robustas, eficientes e interactivas.

Ejercicios Prácticos para el Capítulo 11: JavaScript y el Servidor

Estos ejercicios prácticos están diseñados para reforzar tu comprensión de los conceptos discutidos en el Capítulo 11, enfocándose en Node.js, la construcción de APIs REST con Express, y la implementación de comunicación en tiempo real usando WebSockets. Al completar estos ejercicios, ganarás experiencia práctica con JavaScript del lado del servidor, mejorando tu capacidad para desarrollar aplicaciones web dinámicas e interactivas.

Ejercicio 1: Servidor Node.js Básico

Objetivo: Crear un servidor Node.js simple que responda con "¡Hola, Node.js!" para cualquier solicitud.

Solución:

// Create a file named server.js
const http = require('http');

const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Hello, Node.js!');
});

const port = 3000;
server.listen(port, () => {
    console.log(`Server running at <http://localhost>:${port}/`);
});

Ejecuta este servidor con node server.js y navega a http://localhost:3000 en tu navegador para ver la respuesta.

Ejercicio 2: Construyendo una API REST Simple con Express

Objetivo: Crear una aplicación Express que gestione una lista de tareas, soportando operaciones para crear, leer, actualizar y eliminar tareas.

Solución:

const express = require('express');
const app = express();
app.use(express.json()); // Middleware to parse JSON bodies

let tasks = [{ id: 1, task: 'Do laundry' }, { id: 2, task: 'Write code' }];

app.get('/tasks', (req, res) => {
    res.status(200).json(tasks);
});

app.post('/tasks', (req, res) => {
    const newTask = { id: tasks.length + 1, task: req.body.task };
    tasks.push(newTask);
    res.status(201).json(newTask);
});

app.put('/tasks/:id', (req, res) => {
    let task = tasks.find(t => t.id === parseInt(req.params.id));
    if (!task) res.status(404).send('Task not found');
    else {
        task.task = req.body.task;
        res.status(200).json(task);
    }
});

app.delete('/tasks/:id', (req, res) => {
    tasks = tasks.filter(t => t.id !== parseInt(req.params.id));
    res.status(204).send();
});

const port = 3000;
app.listen(port, () => {
    console.log(`Server running on <http://localhost>:${port}`);
});

Ejercicio 3: Aplicación de Chat en Tiempo Real con WebSockets

Objetivo: Implementar una aplicación de chat simple en tiempo real utilizando WebSockets.

Solución:

// Server setup (server.js)
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) {
    ws.on('message', function incoming(message) {
        console.log('received: %s', message);
        wss.clients.forEach(function each(client) {
            if (client !== ws && client.readyState === WebSocket.OPEN) {
                client.send(message);
            }
        });
    });
});

HTML del Cliente (index.html):

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Chat</title>
</head>
<body>
    <textarea id="messages" cols="30" rows="10" readonly></textarea><br>
    <input type="text" id="messageBox" autocomplete="off"><button onclick="sendMessage()">Send</button>

    <script>
        const ws = new WebSocket('ws://localhost:8080');
        const messages = document.getElementById('messages');

        ws.onmessage = function (event) {
            messages.value += event.data + '\\n';
        };

        function sendMessage() {
            const messageBox = document.getElementById('messageBox');
            ws.send(messageBox.value);
            messageBox.value = '';
        }
    </script>
</body>
</html>

Estos ejercicios ofrecen una forma práctica de aplicar las habilidades de JavaScript del lado del servidor que has aprendido en este capítulo. Desde configurar servidores básicos y crear servicios RESTful hasta implementar sistemas sofisticados de comunicación en tiempo real, ahora tienes las herramientas para construir aplicaciones web robustas, eficientes e interactivas.