使用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
相关产品推荐
相关产品推荐

