Actualmente estoy creando una aplicación y tengo un archivo de rutas que se ve así.
const router = require('express').Router(); router.get('/', (req, res) => res.render('statics/home')); router.get('/jobs', (req, res) => res.render('statics/jobs')); router.get('/about-page', (req, res) => res.render('statics/about-page')); router.get('/valves', (req, res) => res.render('statics/valves')); router.all('*', (req, res) => res.notFound()); module.exports = router;Estoy tratando de encontrar una manera de refactorizar mis rutas y tener una sola ruta que acepte cualquier cadena y luego verifique si existe un archivo que coincida.
¡Cualquier ayuda apreciada!
Para manejar fácilmente el archivo estático, puede usar express static, express enrutará automáticamente todos los archivos dentro de la carpeta estática
app = require('express')(); app.use('statics',express.static('statics'));Algo como esto podría funcionar:
const router = require('express').Router(); const fs = require('fs'); router.get(':template', (req, res) => { const tpl = req.param('template'); if (tpl) { if (fs.existsSync('/path/to/templates/' + tpl + '.ext')) { // adjust the path and template extension res.render('statics/' + tpl); } else { res.notFound(); } } else { res.render('statics/home'); } }); router.all('*', (req, res) => res.notFound()); module.exports = router;O probablemente un mejor enfoque sería leer el directorio de plantillas una vez y crear rutas basadas en su contenido:
const router = require('express').Router(); const fs = require('fs'); const templates = fs.readdirSync('/path/to/templates'); templates.forEach(tpl => { tpl = tpl.substring(tpl.lastIndexOf('/') + 1); if (tpl === 'home') { router.get('/', (req, res) => res.render('statics/home')) } else { router.get('/' + tpl, (req, res) => res.render('statics/' + tpl)) } }); router.all('*', (req, res) => res.notFound()); module.exports = router;