Mám toto ve složce controllers:
//controler.js exports.serve_sitemap = (req, res) => { res.sendFile("../../sitemap.xml"); // or // res.send(__dirname + "./sitemap.xml") // But neither of these work };
Tato exportovaná funkce je importována do souboru uvnitř routes
adresář
const { serve_sitemap } = require('../controllers/indexer') var router = require('express').Router() router.get("/sitemap", serve_sitemap) module.exports = router
V současné době dostávám chybu 404, když se pokouším získat sitmapu na localhost:3000/sitemap
Struktura složek:
Předtím jsem měl to samé v index.js, což je vstupní bod.
app.get("/sitemap", (req, res) => { res.sendFile(__dirname + "/sitemap.xml"); });
To fungovalo perfektně, dokud jsem se nerozhodl projekt restrukturalizovat
- Jak mohu při použití res.send() odkazovat na soubor sitemap.xml, který se nachází v kořenovém adresáři ze souboru, který je v podadresáři?
- Jak mohu získat absolutní cestu ke kořenovému adresáři projektového adresáře, pak mohu k cestě připojit název souboru. To může vyřešit problém
Možná mi chybí něco jasného. V tom případě mi prosím pomozte.
Jakýkoli návrh vděčně přijat. Předem děkuji
Odpověď
Proč si myslíte, že res.sendFile(__dirname + "./sitemap.xml")
fungovalo by to?
Nejprve __dirname + "./sitemap.xml"
není způsob, jakým by měly být cesty zřetězeny, měli byste použít join
místo toho, zvláště pokud vaše druhá cesta začíná ./
. A neexistuje žádný soubor sitemap.xml
v adresáři ovladače:__dirname + "./sitemap.xml"
výsledkem by bylo něco jako /path/to/project/src/controller/./sitemap.xml
A proč by měl "../../sitemap.xml"
práce. Pokud máte pouze "../../sitemap.xml"
je relativní k pracovnímu adresáři, což je ten, kde se (tuším) nachází index.js. Takže "../../sitemap.xml"
bude vyřešen na základě /path/to/project
, takže /path/to/project/../../sitemap.xml
.
Kvůli tomu je buď res.sendFile("./sitemap.xml")
(vzhledem k index.js
) nebo res.sendFile(path.join(__dirname, "../../sitemap.xml"))
(vzhledem k ovladači).