Crear fichero de rutas con NodeJS
(4 min. de lectura) 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}`);
});
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;
//Rutas
const rutasNode = require('./rutas/rutasProyecto');
app.use("/api",rutasNode);
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;