24-08-2025

Crear fichero de rutas con nodejs

En el post sobre como crear un servidor con NodeJS hay un ejemplo de una ruta usando Express, que para refrescar sería:

const express = require('express');
const app = express();
// Define una ruta básica
app.get('/', (req, res) => {
res.send('¡Hola, mundo! Este es mi servidor con Express');
});

app.get('/despedida', (req, res) => {
res.send('¡Adiós, mundo!');
});
// Define el puerto
const PORT = 3000;

// Inicia el servidor
app.listen(PORT, () => {
console.log(`Servidor corriendo en http://localhost:${PORT}`);
});
Con este ejemplo si se pone en el navegador la url: "http://localhost:3000/", mostrará hola mundo '"¡Hola, mundo! Este es mi servidor con Express"', pero se pone en el navegador la url: "http://localhost:3000/despedida", mostrará hola mundo '"¡Adiós, mundo!"'.
Lo ideal es tener las rutas en un fichero aparte, como con las rutas en laravel.
Para crear un fichero de rutas en NodeJS y luego usarlas hay que hacer lo siguiente: Primero sería crear un fichero donde se almacenarán las rutas, por ejemplo, "/rutas/rutasProyecto.js", dicho fichero contendrá lo siguiente:

onst express = require('express');
const router = express.Router();

//Cargo el controlador

const articulosController = require("../controllers/articulos");

//Definir rutas
router.get('/list-articles',articulosController.getAllArticles);
router.get('/articleById/:id',articulosController.getArticleById);

//exportar rutas
module.exports = router;
Y para usar dichas rutas, tendremos que ir al fichero principal del proyecto de NodeJS y se hará lo siguiente:

//Rutas
const rutasNode =  require('./rutas/rutasProyecto');
app.use("/api",rutasNode);
En el ejemplo anterior se importa el fichero donde se encuentran las rutas. Luego con la linea "app.use("/api",rutasNode);" se añade el prefiero "api", o lo que se quiera, y con "rutasNode", se usarán las rutas definidas en ese fichero.
En el ejemplo del fichero de rutas hace referencia al "articulosController" que es una clase que hace de controlador y tiene varios métodos, en este ejemplo solo llama a "getAllArticles" y "getArticleById". Pongo el código de la clase de los articulos:

const fs = require("fs");
const path = require("path");
const Article = require('../models/articulo');

const ArticleController = {
  getImage(req, res) {

let file = req.params.file;
let filepath = "./uploads/images/" + file;
console.log(filepath);
//comprobar si existe el fichero
fs.stat(filepath, (error,exists) =>  {
if (!error && exists){
  return res.sendfile(path.resolve(filepath));
}else{

 return res.status(404).send({
  status: 'error',
  data: 'imagen no existe',
  file: req.file
 });
}
});
 
  }, 
  uploadImage(req, res) {

 let param = req.param.id;
 
 if (!req.file){
 return res.status(404).json({
 status: 'error',
 data: 'No se ha subido ningun archivo',
});
 }
 const filepath = req.file.path;
 //obtiene la extension del sin punto
 const extension = path.extname(req.file.originalname).toLocaleLowerCase().replace(".",");

 const validExtension = ["jpg","jpeg","gif","png"];
 if (!validExtension.includes(extension)){
//Borra el fichero subido
fs.unlinkSync(filepath);
return res.status(404).json({
 status: 'error',
 data: 'Archivo no es imagen',
});
 }

 return res.status(200).json({
status: 'success',
data: 'todo bien',
file: req.file
 });
  },  
  // Obtener todos los artículos
  async getAllArticles(req, res) {
try {
 const articles = await Article.getAll();
 console.log('Artículos en la base de datos:');
 console.table(articles);
 return res.status(200).json({
status: 'success',
data: articles
 });
} catch (err) {
 console.error('Error en getAllArticles:', err);
 return res.status(500).json({
status: 'error',
message: 'Error al obtener los artículos',
error: err.message
 });
}
  },

  // Obtener un artículo por ID
  async getArticleById(req, res) {
const { id } = req.params;
try {
 const article = await Article.getById(id);
 if (!article) {
return res.status(301).json({
 status: 'error',
 message: `Artículo con ID ${id} no encontrado`
});
 }
 console.log('Artículo encontrado:');
 console.table([article]);
 return res.status(200).json({
status: 'success',
data: article
 });
} catch (err) {
 console.error('Error en getArticleById:', err);
 return res.status(500).json({
status: 'error',
message: 'Error al obtener el artículo',
error: err.message
 });
}
  }
};
module.exports = ArticleController;
En el ejemplo anterior hay más métodos pero solo nos interesan dos. Para probar con postman o con el navegador solo basta con poner las urls: "http://localhost:3977/api/articleById/10" y "http://localhost:3977/api/list-articles", como está definido en el ejemplo del fichero de rutas. Lo que ha cambiado es que ahora pone "api", o lo uqe se haya definido en "app.use("/api",rutasNode);"" y antes no se había puesto.