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

标签 javascript node.js express

我在 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 错误

文件夹结构:
folder structure

之前,我在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/

相关文章:

javascript - 使用 redux 进行服务端渲染

node.js - Nodejs + Express : Cors is not a function

node.js - 无法使用 Node Express 发布到服务器

javascript - IE 使用 html2canvas 返回空/空白 Canvas

node.js - JSHint 和下划线问题 '_'

Javascript onclick 弹出窗口,不显示 href 目标网址

javascript - 如何托管依赖于 Node.js 的网站?

node.js - 带有 SSL 的 Express + CloudFlare

javascript - AngularJS 将 css 类添加到父 div

javascript - 从输入字段值创建 JS 数组