NodeJS使用fs.writeFile报错:Callback必须为函数,求解决
问题解决:TypeError [ERR_INVALID_CALLBACK]
错误原因分析
你遇到的错误来自两个核心问题:
fs.writeFile参数缺失:该API的正确调用格式是fs.writeFile(文件名, 要写入的内容[, 选项], 回调函数),你漏传了第二个参数(要写入文件的内容),导致原本的回调被当成了写入内容,真正的回调参数变成undefined,触发了「回调必须是函数」的错误。- 回调参数顺序错误:Node.js异步API遵循错误优先回调规范,回调的第一个参数永远是错误对象(成功时为
null),不存在所谓的succ参数,你搞反了参数顺序。
修正后的代码
假设root实例可以通过this.toString()获取要写入的SVG字符串,修正后的write函数如下:
write(fileName, cb) { // 获取要写入文件的内容,比如root对应的SVG字符串 const content = this.toString(); fs.writeFile(fileName, content, function(err) { if (err) { cb(err); } else { // 成功时传入null表示无错误,符合Node回调规范 cb(null); } }); }
或者用更简洁的箭头函数写法:
write(fileName, cb) { const content = this.toString(); fs.writeFile(fileName, content, (err) => cb(err)); }
补充说明
测试代码root.write('test.svg', () => console.log('done writing!'))是正确的,它传入了文件名和回调函数。修正后的write方法会把root对应的内容写入文件,成功后触发回调打印done writing!。
内容的提问来源于stack exchange,提问作者laura
相关产品推荐
相关产品推荐

