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}`);
});
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;