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

Node.js中如何在fs.readFile回调中获取文件路径?

如何在fs.readFile回调中获取正确的文件路径?

你的问题出在fs.readFile的回调函数参数声明上,你在回调里额外加了path参数,但实际上fs.readFile的回调只接收两个参数:err和data。这个多余的path参数会创建一个局部变量,遮蔽了外层作用域的path变量,而因为readFile不会传递第三个值,所以这个局部path就是undefined。

修复后的代码:

watcher.on('add', path => { 
  var log = console.log.bind(console); 
  log(`File ${path} has been added`); 
  // 去掉回调里的path参数,直接使用外层的path
  fs.readFile(path,'utf-8', function(err, data) { 
    log(`File ${path} has been read`); 
    // 你的其他逻辑...
  }); 
});

为什么这样能行?

JavaScript的作用域规则是:如果当前作用域里没有某个变量,会向上一层作用域查找。去掉回调里的path参数后,代码就会去外层的add事件回调里找到正确的path变量,也就是被添加的文件路径。

另外,你也可以用箭头函数来写回调,箭头函数本身没有自己的作用域,会继承外层作用域的变量,代码会更简洁:

watcher.on('add', path => { 
  const log = console.log.bind(console); 
  log(`File ${path} has been added`); 
  fs.readFile(path,'utf-8', (err, data) => { 
    log(`File ${path} has been read`); 
    // 你的其他逻辑...
  }); 
});

内容的提问来源于stack exchange,提问作者Aparna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:18:58