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

使用Express搭建的NodeJS API调用FS模块无法写入本地JSON文件问题

Express写入本地JSON文件失败解决方案

核心原因

  • 未正确结束HTTP请求响应:async路由处理函数中没有给客户端返回响应,Express无法感知请求处理完成,异步文件写入的IO操作可能在请求上下文被销毁时中断,所以出现控制台打印了数据但没写入文件的情况
  • 相对路径指向不符合预期:./configs.json 是相对于Node进程启动时的工作目录的路径,不是当前代码文件所在的目录,很可能文件已经写入到其他目录,你找错了位置
  • 错误被静默吞掉:try catch中抛出的错误没有Express错误处理中间件承接,异步报错不会输出到控制台,你看不到权限不足、目录不存在之类的写入失败提示

修复方案

1. 完善updateData函数逻辑

修改代码如下,添加响应返回、绝对路径和错误输出:

const fs = require('fs').promises;
const path = require('path');
async function updateData(req,res){
  try {
    let { name, phone, email, addres, whatsapp, officeHours} = req.body;
    let configs={
      name:name,
      phone:phone,
      email:email,
      addres:addres,
      whatsapp:whatsapp,
      officeHours: officeHours
    };
    let data = JSON.stringify(configs, null, 2); // 加格式化方便阅读
    console.log(data);
    // 用__dirname拼接绝对路径,确保写入到当前文件所在目录
    const targetPath = path.join(__dirname, './configs.json');
    await fs.writeFile(targetPath, data);
    // 写入完成后返回响应,通知Express请求处理完成
    return res.status(200).json({code:0, msg:'写入成功'})
  }catch(err){
    console.error('写入文件失败:', err); // 打印错误到控制台
    return res.status(500).json({code:1, msg:'写入失败', error: err.message})
  }
}
module.exports = {updateData};

2. 确认前置配置

确保你的Express入口文件已经配置了body解析中间件,否则req.body会为undefined(你现在能打印出数据说明已经配置,可跳过):

const express = require('express');
const app = express();
// 解析json格式的请求体
app.use(express.json());
// 解析form表单格式的请求体
app.use(express.urlencoded({extended: true}));

修改完成后重新启动服务发送请求,即可在当前代码文件所在目录看到生成的configs.json文件,如果写入失败控制台会打印具体错误原因。

内容的提问来源于stack exchange,提问作者Erick Scur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:48:00