sendFile方法需绝对路径问题:静态目录配置后仍异常
问题分析与解决
问题原因
res.sendFile() 方法不会自动关联你配置的 express.static 静态资源目录,它要求必须传入绝对路径,或者通过 root 参数指定文件所在的根目录。你直接传 "about.html" 会被识别为相对路径,Node.js 会以当前进程的工作目录为基准查找文件,而非你设置的public目录,因此才会出现去C盘路径查找的错误。
而访问 /about.html 正常,是因为 express.static 中间件会自动把该请求路径映射到 public/about.html,这个逻辑和 res.sendFile 完全独立。
解决方案
有两种可行的解决方式:
方式一:传入绝对路径
使用 path 模块拼接出文件的完整绝对路径,取消你注释掉的代码即可:
app.get("/about", (req, res)=>{ res.sendFile(path.join(path.resolve(),"public","about.html")); });
path.resolve()会返回当前项目的根目录绝对路径,再拼接public和about.html就能得到目标文件的完整绝对路径。
方式二:指定root参数
给 res.sendFile() 传入 root 选项,明确指定文件所在的根目录(即你的public目录),这样就可以直接使用相对文件名:
app.get("/about", (req, res)=>{ res.sendFile("about.html", { root: path.join(path.resolve(), "public") }); });
额外说明
从PHP转Node.js/Express需要注意:Express的静态资源中间件和直接发送文件的API是独立的逻辑,前者处理浏览器对静态文件的直接请求,后者是在路由中主动发送指定文件,两者不会共享路径配置,必须显式指定文件位置。
内容的提问来源于stack exchange,提问作者ANIKET KUMAR
相关产品推荐
相关产品推荐

