[英]How to res.sendFile() a file that is in a different directory for Express.js webapp?
我在控制器文件夹中有这个:
//controler.js
exports.serve_sitemap = (req, res) => {
res.sendFile("../../sitemap.xml");
// or
// res.send(__dirname + "./sitemap.xml")
// But neither of these work
};
这个导出的 function 被导入到routes
目录中的一个文件中
const { serve_sitemap } = require('../controllers/indexer')
var router = require('express').Router()
router.get("/sitemap", serve_sitemap)
module.exports = router
目前,当我尝试在localhost:3000/sitemap
获取 sitmap 时出现 404 错误
之前,我在 index.js 中有同样的东西,它是入口点。
app.get("/sitemap", (req, res) => {
res.sendFile(__dirname + "/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"))
(相对到控制器)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.