Node.js中使用fs模块读取文件时,直接使用相对路径可能因运行环境不同导致找不到文件。本文通过示例展示该常见问题,并推荐使用path.join结合__dirname构造绝对路径,确保跨环境稳定读取文件。
Node.js fs模块读取文件路径问题
在Node.js开发过程中,我们最常使用的核心模块之一是fs(文件系统模块),特别是其中的方法用于读取文件内容。

然而,直接运行上述代码后,往往无法按预期读取到test.html文件的内容。这并非代码逻辑错误,而是路径解析机制导致的常见问题,解决方法如下。
造成这一现象的原因是,Node.js中相对路径的解析基准点取决于启动脚本的位置,而非代码文件所在目录。因此,不同的运行环境或启动方式会导致最终读取的文件路径不同。
正确的写法应该是使用"path.join()"的方式实现:(__dirname表示当前文件的目录名)
使用path.join解决路径问题
//require 表示引包,引包就是引用自己的一个特殊功能
var http = require("http");
var path = require("path");
var fs = require("fs");
//创建服务器,参数是一个回调函数,表示如果有事件进来,要做什么
var server = http.createServer(function (req,res) {
fs.readFile(path.join(__dirname, "./test.html"),function (err,data) {
res.writeHead(200,{"Content-type":"text/html;charset=UTF-8"});
res.end(data);
});
});
//运行服务器 2000端口 端口可以任意修改
server.listen(2000,"127.0.0.1");
修改后的代码运行效果如下所示,文件被成功读取并返回。

本文介绍了Node.js中fs模块读取文件时相对路径的常见陷阱及正确解决方案,希望对各位开发者有所帮助。