Node.js 读取文件时为什么总是返回 undefined?

极客振莉 阅读 60

我用 fs.readFileSync 读一个本地 JSON 文件,但返回值是 undefined,明明路径没错啊,文件也确实存在。试了异步的 fs.readFile 也一样,控制台没报错,但数据拿不到。

这是我的代码:

const fs = require('fs');
const data = fs.readFileSync('./config.json', 'utf8');
console.log(data); // 输出 undefined
我来解答 赞 12 收藏
二维码
手机扫码查看
2 条解答
端木启腾
先检查一下文件路径和文件内容。虽然你说路径没错,但有时候相对路径在不同的运行环境可能会有问题。确保当前工作目录是你期望的那个目录。还有就是检查下 config.json 文件的内容,确保它是一个有效的 JSON 文件,不是空的或者有语法错误。

你试试打印出文件内容看看是什么,如果确实是 undefined 或者空字符串,那可能文件内容有问题。如果不是,那就得检查下文件路径了。

如果文件内容没问题,可以尝试绝对路径来排除相对路径的问题。代码修改如下:

pre class="pure-highlightjs line-numbers">const fs = require('fs');
const path = require('path');

const filePath = path.join(__dirname, 'config.json');
const data = fs.readFileSync(filePath, 'utf8');

try {
const jsonData = JSON.parse(data);
console.log(jsonData);
} catch (err) {
console.error('Error parsing JSON string:', err);
}


这样可以确保路径是正确的,并且尝试解析 JSON 数据,如果文件内容有问题会抛出异常,方便你定位问题。
点赞
2026-03-21 09:24
Prog.翌钊
你这代码看着没问题,但 fs.readFileSync 返回 undefined 通常不是路径错了,而是文件压根没读到——大概率是 Node 运行时的当前工作目录跟你以为的不一样。

比如你项目结构可能是这样:

project/
├── src/
│ └── index.js ← 你在这儿写代码
└── config.json ← 文件在根目录


但如果你在 src/ 里执行 node src/index.js,那 Node 的当前目录是 src/,它去找 ./config.json 自然找不到,又不报错(因为 Node 在某些旧版本或某些系统下对不存在的文件会返回 undefined 而不是 throw),最后你拿到的就是 undefined

调试看看最直接的方式是加两行:

const fs = require('fs');
console.log('当前工作目录:', process.cwd());
console.log('文件是否存在:', fs.existsSync('./config.json'));
const data = fs.readFileSync('./config.json', 'utf8');
console.log(data);


大概率你会看到 文件是否存在: false

解决办法有两个:

一个是改路径,用 __dirname 拼绝对路径:

const path = require('path');
const data = fs.readFileSync(path.join(__dirname, 'config.json'), 'utf8');


另一个是启动时切到正确目录,比如 node index.js 而不是 node src/index.js,或者用 cd .. && node src/index.js(不推荐这么搞)。

另外顺带一提,如果文件里是 JSON,记得 fs.readFileSync 返回的是字符串,你得自己 JSON.parse(data) 才能用,不过你说返回 undefined,说明连读都没读到,这步还没到。

你先加个 process.cwd() 打印看看,基本能定位到问题。
点赞 1
2026-02-27 12:01