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
相关产品推荐
相关产品推荐

