Node.js 读取文件时为什么总是返回 undefined? 极客振莉 提问于 2026-02-27 11:59:19 阅读 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.翌钊 Lv1 你这代码看着没问题,但 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 加载更多 相关推荐 2 回答 30 浏览 Node.js可读流处理文件时,为什么每次read()返回的数据不完整? 在用Node.js的可读流读取大文件时,我尝试通过循环调用stream.read()来逐块处理数据,但发现有时候返回的数据不完整,甚至出现空字符串。比如设置highWaterMark=1024后,第一... Tr° 泽睿 前端 2026-02-12 02:49:51 1 回答 64 浏览 Node.js Transform流处理大文件时内存占用一直飙升怎么办? 我在用Vue组件上传文件到Node.js后端,想通过Transform流实时处理超大日志文件。但发现内存占用持续上涨,处理500MB文件时直接爆了。 试过设置highWaterMark=1024*10... Dev · 朱莉 前端 2026-01-27 06:02:26 1 回答 16 浏览 Node.js 后端接口响应慢,前端 Vue 页面加载卡顿怎么办? 我用 Node.js 写了个接口,返回用户列表数据,但每次请求都要 2-3 秒,导致 Vue 页面白屏很久。已经试过加缓存,但效果不明显,是不是哪里写得不对? 前端是用 Vue 3 + Axios 请... 国凤 前端 2026-03-04 08:19:22 1 回答 29 浏览 为什么用JavaScript的AES加密后,Node.js解密时总报错? 我在前端用crypto-js做AES加密,后端用Node.js的crypto模块解密,但一直报错说密文无效。两边都用了同样的AES-256-CBC算法,密钥和iv也确保一致,测试代码如下: /* 这是... Prog.怡企 安全 2026-02-19 12:49:30 2 回答 29 浏览 Lighthouse Node API运行后性能评分一直是undefined怎么办? 我在用Lighthouse Node API跑性能测试时,获取的performance评分总是undefined,但其他指标正常。代码是这样写的: const lighthouse = require... 皇甫明阳 工具 2026-02-17 16:29:22 1 回答 34 浏览 Docker容器运行Node.js应用时,为什么端口映射后访问不到页面? 大家好,我最近在尝试用Docker部署一个简单的Node.js应用,但遇到了端口映射的问题。应用在本地直接运行时能正常访问,但打包到Docker容器后,访问localhost:3000一直显示空白页面... Dev · 东芳 前端 2026-02-06 17:48:53 2 回答 75 浏览 为什么我的Node.js事件监听在第二次触发时不执行? 我在用Node.js的EventEmitter写一个消息队列处理模块,发现第一次触发事件时能正常执行监听函数,但第二次触发就完全没反应了。 代码大概是这样写的: const EventEmitter ... UP主~艳珂 前端 2026-01-29 21:39:38 1 回答 19 浏览 Node.js 中 try-catch 为啥捕获不到异步错误? 我在写一个 Vue 项目,用 axios 调后端接口,但 Node.js 服务端的异步操作出错时,try-catch 根本抓不到,页面直接白屏了,这咋办? 我试过在 async 函数里加 try-ca... 闲人明明 前端 2026-02-28 16:20:20 1 回答 25 浏览 Node.js用cluster模块启动多个进程后,React前端怎么连? 我用 Node.js 的 cluster 模块起了多个工作进程,但前端 React 应用发请求时老是连不上,或者偶尔 502。是不是端口没配对?我主进程监听的是 3001,前端代码里写死了这个端口: ... 沐言 前端 2026-02-28 15:18:20 1 回答 27 浏览 Docker容器里跑Node.js服务,前端Vue页面加载空白怎么办? 我在本地开发时 Vue 项目正常,但打包后放进 Docker 容器,用 Node.js 当静态服务器,页面就一片空白,控制台也没报错,这是啥情况? 我试过把 dist 目录 COPY 到镜像里,也检查... UI红爱 前端 2026-02-25 20:17:20
fs.readFileSync返回undefined通常不是路径错了,而是文件压根没读到——大概率是 Node 运行时的当前工作目录跟你以为的不一样。比如你项目结构可能是这样:
但如果你在
src/里执行node src/index.js,那 Node 的当前目录是src/,它去找./config.json自然找不到,又不报错(因为 Node 在某些旧版本或某些系统下对不存在的文件会返回 undefined 而不是 throw),最后你拿到的就是undefined。调试看看最直接的方式是加两行:
大概率你会看到
文件是否存在: false。解决办法有两个:
一个是改路径,用
__dirname拼绝对路径:另一个是启动时切到正确目录,比如
node index.js而不是node src/index.js,或者用cd .. && node src/index.js(不推荐这么搞)。另外顺带一提,如果文件里是 JSON,记得
fs.readFileSync返回的是字符串,你得自己JSON.parse(data)才能用,不过你说返回undefined,说明连读都没读到,这步还没到。你先加个
process.cwd()打印看看,基本能定位到问题。