JS读取本地JSON文件报错ReferenceError: getFile is not defined
报错原因定位
你遇到的报错和路径问题无关,核心问题有两个:
- 不存在
getFile这个内置方法:不管是浏览器原生JS还是Node.js默认环境,都没有提供全局的getFile函数,直接调用未定义的函数就会抛出Reference error : getFile is not defined错误,报错参考:
- 原路径写法存在隐患:就算补全了文件读取方法,你写的
"..\UniSwap2\Uniswap_Surface_Rates.json"也无法正确定位文件:- JS字符串中单反斜杠
\是转义字符,直接书写不会被识别为路径分隔符 - 相对路径层级逻辑虽然正确,但转义问题会导致路径解析完全失效
- JS字符串中单反斜杠
根据你给出的文件路径:
- 脚本位置:
F:\Downloads\Triangular Arbitrage\RESOURCES\Uniswap2JS\main.js - 目标JSON位置:
F:\Downloads\Triangular Arbitrage\RESOURCES\UniSwap2\Uniswap_Surface_Rates.json
两个文件同属RESOURCES目录下的不同子文件夹,从main.js出发需要先返回上一级到RESOURCES目录,再进入UniSwap2文件夹即可找到目标JSON,正确相对路径为../UniSwap2/Uniswap_Surface_Rates.json(统一使用正斜杠,无需转义,Node.js和浏览器都能识别)。
正确读取本地JSON方案(Node.js环境)
从你的文件路径判断你是在Node.js环境跑脚本,读取本地文件需要用Node内置的fs模块,配合你已经写的async/await语法即可实现,推荐用path模块拼接路径,彻底避免相对路径计算错误(比如从其他目录启动脚本时相对路径失效的问题),完整可运行代码如下:
// 引入Node.js内置模块 const fs = require('fs/promises'); // 基于Promise的文件系统API,适配async写法 const path = require('path'); // 路径处理工具,屏蔽跨平台路径差异 // GET DEPTH ////////////////// async function getDepth(amountIn, limit) { console.log("Reading Surface Rate Information...") // 拼接绝对路径:__dirname是当前脚本所在目录的绝对路径,拼接后不受启动位置影响 const targetPath = path.resolve(__dirname, "../UniSwap2/Uniswap_Surface_Rates.json"); // 异步读取文件,指定utf8编码直接获取字符串内容 const fileContent = await fs.readFile(targetPath, 'utf8'); // 解析JSON const fileJsonArray = JSON.parse(fileContent); const fileJsonArrayLimit = fileJsonArray.slice(0, limit); console.log(fileJsonArrayLimit); return fileJsonArrayLimit; } // 调用异步函数需捕获异常,方便排查错误 getDepth(1, 2).catch(err => { console.error("读取文件失败:", err); });
其他注意事项
- 如果你是在浏览器环境运行这段代码,无法直接通过路径读取本地磁盘文件,这是浏览器的安全沙箱限制,需要把JSON文件放到web服务的静态资源目录下,通过
fetch接口请求,或者通过<input type="file">组件让用户手动选择文件后读取。 - 如果一定要用Windows风格的反斜杠写路径,需要对反斜杠做转义,写法为
"..\\UniSwap2\\Uniswap_Surface_Rates.json",但不推荐这种写法,跨平台运行容易出问题。 - 原代码中
fileJsonArray、fileJsonArrayLimit变量没有加let/const声明,会成为隐式全局变量,容易引发隐蔽bug,所有变量都要显式声明。
内容的提问来源于stack exchange,提问作者diggiddi
相关产品推荐
相关产品推荐

