En aquest tema, aprendrem com gestionar les rutes en un servidor HTTP creat amb Node.js. El routing és una part fonamental de qualsevol aplicació web, ja que permet definir com es gestionen les diferents peticions que arriben al servidor.

Objectius

  • Entendre què és el routing i per què és important.
  • Aprendre a definir rutes bàsiques en Node.js.
  • Gestionar paràmetres de ruta i consultes.
  • Implementar rutes dinàmiques.

Què és el Routing?

El routing és el procés de definir com el servidor respon a les diferents peticions HTTP que arriben a diferents URL. Cada ruta pot estar associada a una funció que s'executa quan es rep una petició a aquesta URL específica.

Definint Rutes Bàsiques

Comencem per crear un servidor HTTP simple i definir algunes rutes bàsiques.

Exemple de Codi

const http = require('http');

const server = http.createServer((req, res) => {
  if (req.url === '/' && req.method === 'GET') {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Benvingut a la pàgina principal!');
  } else if (req.url === '/about' && req.method === 'GET') {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Aquesta és la pàgina sobre nosaltres.');
  } else {
    res.writeHead(404, { 'Content-Type': 'text/plain' });
    res.end('Pàgina no trobada');
  }
});

server.listen(3000, () => {
  console.log('Servidor escoltant al port 3000');
});

Explicació

  1. Importar el mòdul http: Utilitzem el mòdul http per crear el servidor.
  2. Crear el servidor: Utilitzem http.createServer per crear el servidor i definir una funció de callback que gestiona les peticions.
  3. Definir rutes: Utilitzem req.url i req.method per determinar quina ruta s'ha sol·licitat i quin mètode HTTP s'ha utilitzat.
  4. Enviar respostes: Utilitzem res.writeHead per establir el codi d'estat i el tipus de contingut, i res.end per enviar la resposta.

Gestionar Paràmetres de Ruta i Consultes

Les rutes poden incloure paràmetres i consultes que permeten passar informació addicional a la petició.

Exemple de Codi

const url = require('url');

const server = http.createServer((req, res) => {
  const parsedUrl = url.parse(req.url, true);
  const pathname = parsedUrl.pathname;
  const query = parsedUrl.query;

  if (pathname === '/user' && req.method === 'GET') {
    const userId = query.id;
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end(`Informació de l'usuari amb ID: ${userId}`);
  } else {
    res.writeHead(404, { 'Content-Type': 'text/plain' });
    res.end('Pàgina no trobada');
  }
});

server.listen(3000, () => {
  console.log('Servidor escoltant al port 3000');
});

Explicació

  1. Importar el mòdul url: Utilitzem el mòdul url per analitzar la URL de la petició.
  2. Analitzar la URL: Utilitzem url.parse per obtenir el pathname i els paràmetres de consulta.
  3. Gestionar paràmetres de consulta: Utilitzem parsedUrl.query per accedir als paràmetres de consulta i utilitzar-los en la resposta.

Implementar Rutes Dinàmiques

Les rutes dinàmiques permeten definir rutes que poden canviar en funció de la informació proporcionada a la URL.

Exemple de Codi

const server = http.createServer((req, res) => {
  const parsedUrl = url.parse(req.url, true);
  const pathname = parsedUrl.pathname;

  const userIdMatch = pathname.match(/^\/user\/(\d+)$/);

  if (userIdMatch && req.method === 'GET') {
    const userId = userIdMatch[1];
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end(`Informació de l'usuari amb ID: ${userId}`);
  } else {
    res.writeHead(404, { 'Content-Type': 'text/plain' });
    res.end('Pàgina no trobada');
  }
});

server.listen(3000, () => {
  console.log('Servidor escoltant al port 3000');
});

Explicació

  1. Utilitzar expressions regulars: Utilitzem expressions regulars per identificar rutes dinàmiques.
  2. Capturar paràmetres de ruta: Utilitzem pathname.match per capturar els paràmetres de la ruta i utilitzar-los en la resposta.

Exercicis Pràctics

Exercici 1

Crea un servidor HTTP que gestioni les següents rutes:

  • GET /: Retorna "Pàgina principal".
  • GET /contact: Retorna "Pàgina de contacte".
  • GET /product/:id: Retorna "Informació del producte amb ID: :id".

Solució

const http = require('http');
const url = require('url');

const server = http.createServer((req, res) => {
  const parsedUrl = url.parse(req.url, true);
  const pathname = parsedUrl.pathname;

  if (pathname === '/' && req.method === 'GET') {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Pàgina principal');
  } else if (pathname === '/contact' && req.method === 'GET') {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Pàgina de contacte');
  } else {
    const productMatch = pathname.match(/^\/product\/(\d+)$/);
    if (productMatch && req.method === 'GET') {
      const productId = productMatch[1];
      res.writeHead(200, { 'Content-Type': 'text/plain' });
      res.end(`Informació del producte amb ID: ${productId}`);
    } else {
      res.writeHead(404, { 'Content-Type': 'text/plain' });
      res.end('Pàgina no trobada');
    }
  }
});

server.listen(3000, () => {
  console.log('Servidor escoltant al port 3000');
});

Resum

En aquest tema, hem après què és el routing i com definir rutes bàsiques en un servidor HTTP creat amb Node.js. Hem vist com gestionar paràmetres de ruta i consultes, així com implementar rutes dinàmiques. Aquests conceptes són fonamentals per construir aplicacions web robustes i escalables. En el proper mòdul, explorarem com utilitzar NPM per gestionar paquets en les nostres aplicacions Node.js.

Curs de Node.js

Mòdul 1: Introducció a Node.js

Mòdul 2: Conceptes Bàsics

Mòdul 3: Sistema de Fitxers i I/O

Mòdul 4: HTTP i Servidors Web

Mòdul 5: NPM i Gestió de Paquets

Mòdul 6: Framework Express.js

Mòdul 7: Bases de Dades i ORMs

Mòdul 8: Autenticació i Autorització

Mòdul 9: Proves i Depuració

Mòdul 10: Temes Avançats

Mòdul 11: Desplegament i DevOps

Mòdul 12: Projectes del Món Real

© Copyright 2024. Tots els drets reservats