Node.js中如何正确导出导入sqlite3数据库实例 解决调用报错问题
问题原因
你当前的导出导入逻辑不匹配:你在app.js中将数据库实例挂载到了exports对象的db属性上,在main.js导入时直接将整个导出对象赋值给了db变量,此时你的db变量实际是{ db: 数据库实例 }的包装对象,并非数据库实例本身,所以调用db.get会提示方法不存在。
解决方案
提供两种可直接复用的写法,选其中一种即可:
方案1:导入时解构取值
保持app.js的导出逻辑exports.db = db不变,修改main.js的导入代码:
// main.js 写法 const { db } = require("../app.js"); // 后续可正常调用 db.get 等方法
方案2:直接导出数据库实例(更推荐)
修改app.js的导出逻辑,直接暴露数据库实例,不需要额外挂载属性:
// app.js 导出部分修改 const sqlite3 = require("sqlite3").verbose(); let db = new sqlite3.Database("./DB/Datenbank.db"); module.exports = db;
main.js可以保持原导入逻辑不变:
// main.js 写法 const db = require("../app.js");
优化建议
为了避免多处导入时重复创建数据库连接,可以用单例模式封装实例创建逻辑:
// app.js 优化后写法 const sqlite3 = require("sqlite3").verbose(); let dbInstance = null; function getDb() { if (!dbInstance) { dbInstance = new sqlite3.Database("./DB/Datenbank.db"); } return dbInstance; } module.exports = getDb();
内容的提问来源于stack exchange,提问作者kano
相关产品推荐
相关产品推荐

