繁体   English   中英

如何为 Express.js webapp res.sendFile() 一个位于不同目录中的文件?

[英]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.send() 时,如何从子目录中的文件引用位于根目录中的 sitemap.xml 文件?
  • 我怎样才能得到项目目录根目录的绝对路径,然后我可以 append 文件名到路径。 这可以解决问题

我可能遗漏了一些明显的东西。 在那种情况下,请帮帮我。

感激地接受任何建议。 提前致谢

为什么您认为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM