为何我的Localbase.js代码会抛出Cannot find module './localbase.json'错误?
解决Error: Cannot find module './localbase.json'的问题
这个问题我之前也碰到过,核心是Node.js里相对路径的基准不一致导致的,我来帮你理清楚:
问题根源
- 你用
fs.writeFileSync("./localbase.json", "{}")时,这个相对路径是基于Node.js进程的工作目录(也就是你启动server.js的项目根目录),所以文件会被创建在根目录下,而不是db文件夹里。 - 但你用
require('./localbase.json')时,这个相对路径是基于当前模块文件(localbase.js)所在的目录(也就是db目录),所以它会去db/localbase.json找文件——可文件实际在根目录,自然就报错找不到了。
当你把localbase.js移到根目录时,两个路径的基准统一成了根目录,读写都能找到文件,所以就正常了。
解决方法(推荐第一种)
方法1:用__dirname统一路径(最稳妥)
通过__dirname(当前模块文件所在目录的绝对路径)来拼接文件路径,确保读写操作指向同一个位置:
const fs = require("fs"); // 用path模块处理路径更规范,避免不同系统的分隔符问题 const path = require("path"); const filePath = path.join(__dirname, "localbase.json"); if (!fs.existsSync(filePath)) { fs.writeFileSync(filePath, "{}"); } // require支持绝对路径,直接传filePath就行 let database = require(filePath);
这样不管以后把localbase.js移到哪个目录,代码都能正确找到对应的localbase.json文件,不用修改路径。
方法2:手动调整路径指向根目录
如果你希望localbase.json留在根目录,那可以把require的路径改成指向根目录的相对路径:
const fs = require("fs"); const filePath = "./localbase.json"; if (!fs.existsSync(filePath)) { fs.writeFileSync(filePath, "{}"); } // 从db目录往上跳一级到根目录 let database = require("../localbase.json");
不过这种方法灵活性差,以后移动文件位置就得重新改路径,不如方法1实用。
内容的提问来源于stack exchange,提问作者arctan2
相关产品推荐
相关产品推荐

