Node.js中TypeError [ERR_INVALID_CALLBACK]:回调必须为函数的问题求助
解决TypeError [ERR_INVALID_CALLBACK] : Callback must be a function错误
嘿,这个错误我之前也踩过坑!问题出在你混淆了Node.js fs模块里两种不同风格的API用法,咱们一步步来理清楚:
错误原因
Node.js原生的fs.writeFile是回调式API——它要求最后一个参数必须是一个回调函数(用来处理成功/失败的结果)。但你直接调用fs.writeFile("node-message.txt", text)后就用了.then(),既没传必填的回调函数,又把它当成了Promise来用,这就触发了ERR_INVALID_CALLBACK错误。
两种解决方案
方案1:使用回调式写法(符合原生API要求)
如果你习惯用回调函数,可以补全回调参数:
const fs = require("fs"); const text = "File "; // 最后加上回调函数处理结果 fs.writeFile("node-message.txt", text, (err) => { if (err) { console.log("File not created"); return; } console.log("File Created"); });
方案2:使用Promise风格写法(推荐,匹配你原本的.then()需求)
Node.js提供了fs.promises API,它把所有回调式的fs方法都包装成了Promise,这样你就能直接用.then()/.catch()或者async/await了:
方式A:Promise链写法
// 引入promise版本的fs模块 const fs = require("fs").promises; // 或者写成 const fs = require("fs/promises"); const text = "File "; fs.writeFile("node-message.txt", text) .then(() => { console.log("File Created"); }) .catch(() => { console.log("File not created"); });
方式B:async/await写法(更简洁易读)
如果你的代码在async函数里,用await会更清爽:
const fs = require("fs/promises"); const text = "File "; async function createMyFile() { try { await fs.writeFile("node-message.txt", text); console.log("File Created"); } catch (err) { console.log("File not created"); } } // 调用函数 createMyFile();
总结
选其中一种写法就能解决问题啦,个人更推荐用Promise/async-await的写法,代码结构更清晰,也符合现代JavaScript的风格。
内容的提问来源于stack exchange,提问作者user17111378
相关产品推荐
相关产品推荐

