Tengo esto dentro de la carpeta de controladores:
//controler.js exports.serve_sitemap = (req, res) => { res.sendFile("../../sitemap.xml"); // or // res.send(__dirname + "./sitemap.xml") // But neither of these work }; Esta función exportada se importa en un archivo dentro del directorio de routes .
const { serve_sitemap } = require('../controllers/indexer') var router = require('express').Router() router.get("/sitemap", serve_sitemap) module.exports = router Actualmente recibo un error 404 cuando intento obtener el mapa de situación en localhost:3000/sitemap
Antes tenía lo mismo en index.js que es el punto de entrada.
app.get("/sitemap", (req, res) => { res.sendFile(__dirname + "/sitemap.xml"); });Esto estaba funcionando perfectamente, hasta que decidí reestructurar el proyecto.
Tal vez me estoy perdiendo algo obvio. En ese caso, por favor ayúdame.
Cualquier sugerencia se acepta con agradecimiento. Gracias por adelantado
¿Por qué cree que res.sendFile(__dirname + "./sitemap.xml") ?
En primer lugar __dirname + "./sitemap.xml" no es la forma en que se deben concatenar las rutas, debe usar join en su lugar, especialmente si su segunda ruta comienza con ./ . Y no hay ningún archivo sitemap.xml en el directorio del controlador: __dirname + "./sitemap.xml" daría como resultado algo como /path/to/project/src/controller/./sitemap.xml
¿Y por qué debería "../../sitemap.xml" ? Si solo tiene "../../sitemap.xml" , es relativo al directorio de trabajo, que es donde (supongo) se encuentra index.js. Por lo tanto "../../sitemap.xml" se resolverá según /path/to/project , entonces /path/to/project/../../sitemap.xml .
Debido a eso, es res.sendFile("./sitemap.xml") (relativo a index.js ) o res.sendFile(path.join(__dirname, "../../sitemap.xml")) (relativo al controlador).