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

使用Multer上传JSON文件后调用rFile函数出现报错求助

问题原因分析

从报错(文件不存在)来看,核心问题是rFile函数里的文件路径相对基准错误:

  • 测试时直接调用rFile("starting_pois.json")能正常运行,是因为此时执行rFile的脚本所在目录的上级目录存在points文件夹,相对路径../points/xxx有效。
  • 但在app.js的上传接口中调用时,app.js的执行上下文目录和rFile的相对路径基准不匹配,导致../points/${fileName}指向的目录不存在,找不到目标文件。

另外,你自己写的splitTest函数属于冗余代码——multer的req.file.filename已经直接返回文件名,不需要从绝对路径里手动拆分。

解决方案

提供两种可行的修正方式:

方式1:修正rFile中的相对路径

把rFile里的相对路径改为和app.js一致的基准,直接指向app.js所在目录下的points文件夹:

function rFile(fileName) {
  // 去掉../,改为当前目录下的points文件夹
  fs.readFile(`./points/${fileName}`, 'utf-8', (err, jsonString) => {
    // 原有业务逻辑...
  })
}

方式2:传递绝对路径给rFile(更可靠)

彻底避免相对路径的上下文问题,直接在app.js中把文件的绝对路径传给rFile:

修改app.js中的调用逻辑:

// 替换原有的nameFile和rFile调用代码
const fileAbsolutePath = path.join(__dirname, 'points', req.file.filename);
rFile(fileAbsolutePath)

修改rFile函数:

function rFile(filePath) {
  // 直接使用传入的绝对路径读取文件
  fs.readFile(filePath, 'utf-8', (err, jsonString) => {
    // 原有业务逻辑...
  })
}

额外优化:移除冗余的splitTest函数

直接使用multer提供的文件名:

// 删掉splitTest函数,替换为:
const nameFile = req.file.filename;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 11:27:15