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)