我在 Controller 文件夹中有这个:
//controler.js
exports.serve_sitemap = (req, res) => {
res.sendFile("../../sitemap.xml");
// or
// res.send(__dirname + "./sitemap.xml")
// But neither of these work
};
此导出函数导入到 routes
目录内的文件中
const { serve_sitemap } = require('../controllers/indexer')
var router = require('express').Router()
router.get("/sitemap", serve_sitemap)
module.exports = router
目前,当我尝试在 localhost:3000/sitemap
获取站点地图时收到 404 错误
之前,我在index.js 中有同样的东西,它是入口点。
app.get("/sitemap", (req, res) => {
res.sendFile(__dirname + "/sitemap.xml");
});
这一切都运行得很好,直到我决定重组项目
- 使用 res.send() 时,如何从子目录中的文件引用位于根目录中的 sitemap.xml 文件?
- 如何获取项目目录根目录的绝对路径,然后将文件名附加到该路径。这可以解决问题
我可能遗漏了一些明显的东西。在这种情况下,请帮助我。
任何建议都感激地接受。提前致谢
最佳答案
您为什么认为 res.sendFile(__dirname + "./sitemap.xml")
可行?
首先 __dirname + "./sitemap.xml"
不是连接路径的方式,您应该使用 join
相反,特别是如果您的第二条路径以 ./
开头。并且 Controller 目录下没有sitemap.xml
文件:
__dirname + "./sitemap.xml"
会产生类似于 /path/to/project/src/controller/./sitemap.xml
为什么“../../sitemap.xml”
可以工作。如果您只有 "../../sitemap.xml"
它是相对于工作目录的,这是(我猜)index.js 所在的目录。因此 "../../sitemap.xml"
将根据 /path/to/project
进行解析,因此 /path/to/project/。 ./../sitemap.xml
.
因为这是 res.sendFile("./sitemap.xml")
(相对于 index.js
)或 res.sendFile(path .join(__dirname, "../../sitemap.xml"))
(相对于 Controller )。
关于javascript - 如何 res.sendFile() 位于 Express.js webapp 的不同目录中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71305142/