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

极客振莉 阅读 30

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

这是我的代码:

const fs = require('fs');
const data = fs.readFileSync('./config.json', 'utf8');
console.log(data); // 输出 undefined
我来解答 赞 3 收藏
二维码
手机扫码查看
1 条解答
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