Servidor Web
Servidor Básico
Como vimos en el capítulo anterior, es muy sencillo crear un servidor web en node.
Este servidor puede aceptar cualquier petición y siempre presentará el mismo resultado, no es muy útil pero nos da una idea de como funciona un servidor, simplemente escucha por un puerto del computador, recibe una petición (request) y envía una respuesta (response)
const http = require('node:http')
const hostname = 'localhost'
const port = 3000
const server = http.createServer((req, res) => {
res.statusCode = 200
res.setHeader('Content-Type', 'text/plain')
res.end('Hello World')
})
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`)
})
Servidor Avanzado
Este servidor puede aceptar diferentes peticiones y presentar diferentes resultados como HTML, JSON o simple texto, incluso manejar errores e informar al cliente
const http = require('node:http')
const server = http.createServer((req, res) => {
// Handle different routes
if (req.url === '/' && req.method === 'GET') {
res.writeHead(200, { 'Content-Type': 'text/html' })
res.end('Home Page
Welcome to my Node.js server!
')
} else if (req.url === '/about' && req.method === 'GET') {
res.writeHead(200, { 'Content-Type': 'text/html' })
res.end('About Page
This is a simple Node.js HTTP server.
')
} else if (req.url.startsWith('/api/data') && req.method === 'GET') {
// Extract query parameters (e.g., `/api/data?user=John&age=30`)
const query = new URL(req.url, `http://${req.headers.host}`).searchParams
const user = query.get('user') || 'Anonymous'
const age = query.get('age') || 'unknown'
//const phone = query.get('phone') || 'unknown'
res.writeHead(200, { 'Content-Type': 'application/json' })
res.end(JSON.stringify({
message: 'Data received',
user,
age
}))
} else if (req.method === 'GET') {
// Handle 404 Not Found for other GET requests
res.writeHead(404, { 'Content-Type': 'text/html' })
res.end('404 Not Found
The page you requested does not exist.
')
} else {
// Handle unsupported HTTP methods
res.writeHead(405, { 'Content-Type': 'text/plain' })
res.end('Method Not Allowed')
}
})
server.listen(3000, () => {
console.log('Server running at http://localhost:3000')
})
Express Framework
A medida que agregamos mas complejidad al servidor nos damos cuenta que podemos simplificar mucho el procesamiento de peticiones, y para eso usaremos un módulo para aplicaciones web llamado Express y lo instalaremos a través de NPM asi:
$ npm install express
De esta manera Express será agregado a nuestro folder node_modules
y tambien a package.json
como dependencia de nuestra app. Una vez instalado podemos simplificar nuestro servidor asi:
const express = require('express')
const app = express()
app.get('/', (req, res) => res.send('Hello Express!'))
app.listen(3000)