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

Node.js中fs.readFile触发ERR_INVALID_ARG_TYPE错误求助

Node.js 文件读写异步操作错误修复

错误原因分析

你代码里的报错核心是异步版fs.readFile参数传递错误:

  • 异步fs.readFile的正确参数格式为:fs.readFile(文件路径, 编码格式, 回调函数)
  • 你最后一行调用fs.readFile("datafile.txt", "utf-8")时,仅传了两个参数,Node.js会把第二个参数utf-8当作回调函数处理,但它是字符串类型,不符合要求,因此抛出ERR_INVALID_ARG_TYPE错误。
  • 另外,就算参数传对,直接console.log(fs.readFile(...))也只会打印Promise对象(Node.js v10+异步fs方法返回Promise),无法拿到实际文件内容。

解决方案

方案1:保持回调风格,补全正确参数

修改writeFile成功后的readFile调用,传入完整的回调函数处理读取结果:

const fs = require('fs');

fs.readFile("datafile.txt", "utf-8", function(err, data){
    let newData = "Some string to write in file";

    fs.writeFile("datafile.txt",  newData, (err) => { 
        if (err) {
          console.log(err); 
        } else { 
          console.log("File written successfully\n"); 
          // 补全回调函数,正确读取并打印文件内容
          fs.readFile("datafile.txt", "utf-8", (readErr, content) => {
            if (readErr) {
              console.log(readErr);
            } else {
              console.log("文件内容:", content);
            }
          });
        } 
      }); 
})

方案2:使用Promise/async-await风格(推荐,避免回调地狱)

Node.js v10+支持fs.promisesAPI,用async/await可以让异步代码更简洁易读:

const fs = require('fs').promises;

async function updateAndVerifyFile() {
  try {
    // 读取原文件(若不需要原内容可跳过此步)
    const originalData = await fs.readFile("datafile.txt", "utf-8");
    const newData = "Some string to write in file";
    
    // 写入新内容
    await fs.writeFile("datafile.txt", newData);
    console.log("File written successfully\n");
    
    // 重新读取验证内容
    const updatedContent = await fs.readFile("datafile.txt", "utf-8");
    console.log("文件内容:", updatedContent);
  } catch (err) {
    console.error("操作出错:", err);
  }
}

updateAndVerifyFile();

补充说明

  • 若仅需验证写入是否成功,fs.writeFile的回调触发且无错误时,就已经代表写入完成,无需额外读取;若要确认内容正确性,读取验证是合理操作。
  • 异步操作的核心逻辑是:必须等待前一个异步任务完成后,再执行依赖它的后续操作,回调、Promise、async-await都是实现该逻辑的不同方式。

内容的提问来源于stack exchange,提问作者Ankur Rangi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:57:26