You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

fs.readFileSync无法识别同目录文件报ENOENT错误如何解决

问题现象

使用Node.js搭建HTTP服务时,即使目标HTML文件node.html与执行脚本存放在同一文件夹下,调用fs.readFileSync方法读取该文件时仍无法识别文件,运行后抛出如下错误:

Error: ENOENT: no such file or directory, open 'node.html'

复现代码
const http = require('http');
const PORT = 3000;
const fs = require('fs')

const server = http.createServer((req, res) => {
    if (req.url === '/') {
        res.writeHead(200, {'content-type': 'text/html'});
        const homePageHTML = fs.readFileSync('node.html');
        console.log(homePageHTML)
        res.end()
    } else {
        res.writeHead(404, {'content-type': 'text/html'});
        res.write('<h1>Sorry, you were misled!</h1>')
        res.end()
    }
})

server.listen(PORT);
故障原因

fs模块传入相对路径时,路径解析的基准是执行node命令时终端所在的工作目录,而非当前执行脚本文件所在的目录。如果启动脚本时没有先进入脚本所在的文件夹,相对路径就会指向错误的位置,导致找不到目标文件。

修复方法
  • 推荐方案:使用__dirname(CommonJS模块内置变量,代表当前脚本所在目录的绝对路径)拼接目标文件路径,完全不受启动命令所在目录的影响:
    将读取文件的代码行替换为:
    const homePageHTML = fs.readFileSync(`${__dirname}/node.html`);
    
    额外提示:当前代码读取到HTML内容后没有写入响应,可将对应位置的res.end()修改为res.end(homePageHTML),否则访问首页会返回空白内容。
  • 临时方案:启动脚本前先通过cd命令进入脚本文件所在的目录,再执行node启动命令,该方式依赖启动路径,容易因操作失误复现问题,不推荐生产环境使用。

内容的提问来源于stack exchange,提问作者nicht verfügbar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 03:24:16