Node.js报ERR_INVALID_CALLBACK回调必须为函数错误求解决方案
错误原因
你调用的是Node.js原生fs模块的回调风格writeFile接口,该接口要求必须传入回调函数作为最后一个入参,你未传入对应回调,反而直接对返回值调用.then()方法(回调式API本身不会返回Promise实例),因此触发参数校验失败,抛出ERR_INVALID_CALLBACK报错。
解决方案1:沿用回调风格改写
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:使用fs.promises下的Promise风格API
Node.js v10及以上版本内置了fs.promises命名空间,提供全量Promise化的fs接口,和你原有代码的链式调用风格匹配度最高,仅需要修改模块引入部分:
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"); });
解决方案3:手动包装为Promise风格(兼容低版本Node.js)
如果你使用的Node.js版本低于v10,没有内置fs.promises,可以用util.promisify工具手动将回调式接口转为Promise风格:
const fs = require("fs"); const { promisify } = require("util"); const writeFile = promisify(fs.writeFile); const text = "File "; writeFile("node-message.txt", text) .then(() => { console.log("File Created"); }) .catch(() => { console.log("File not created"); });
内容的提问来源于stack exchange,提问作者user17000398
相关产品推荐
相关产品推荐

