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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:06:01