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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 17:48:12