在尝试运行此代码时,我始终收到错误“ TypeError:无法读取null的属性'run'”。程序中的其他所有内容都可以正常运行,直到到达sql.run部分为止。
(注意:程序中还有其他代码可处理所有Discord.js部分,此处仅是引起问题的部分)
const Discord = require("discord.js");
const sql = require("sqlite");
sql.open("./warnings.sqlite", {Promise});
sql.get(`SELECT * FROM warnings WHERE userId ="${message.author.id}"`).then(row => {
if (!row) {
sql.run("INSERT INTO warnings (userId, level) VALUES (?, ?)", [message.author.id, 1]);
console.log(row.level);
} else {
sql.run(`UPDATE warnings SET level = ${row.level + 1} WHERE userId = ${message.author.id}`);
console.log(row.level);
}
}).catch(() => {
sql.run("CREATE TABLE IF NOT EXISTS warnings (userId TEXT, level INTEGER)").then(() => {
sql.run("INSERT INTO warnings (userId, level) VALUES (?, ?)", [message.author.id, 1]);
});
});
答案 0 :(得分:0)
我记得前阵子用过它。
我进入了原来的代码,除了打开数据库的{Promise}之外,所有代码都是一样的。尝试删除这种现象,因为您不使用诺言,它不是[better-] sqlite3
sql.open("./warnings.sqlite")
答案 1 :(得分:0)
将我的评论变成完整的答案:
您不会返回要使用的数据库驱动程序,而是在SQLite模块本身上使用它。尝试返回一个连接句柄,并将其用于查询。您必须等待数据库连接承诺首先解决,因此,如果您支持async / await,则可以执行以下操作:
const Discord = require("discord.js");
const sql = require("sqlite");
const dbProm = sql.open("./warnings.sqlite", {Promise});
const db = await dbProm;
db.get(`SELECT * FROM warnings WHERE userId ="${message.author.id}"`).then(row => {
if (!row) {
db.run("INSERT INTO warnings (userId, level) VALUES (?, ?)", [message.author.id, 1]);
console.log(row.level);
} else {
db.run(`UPDATE warnings SET level = ${row.level + 1} WHERE userId = ${message.author.id}`);
console.log(row.level);
}
}).catch(() => {
db.run("CREATE TABLE IF NOT EXISTS warnings (userId TEXT, level INTEGER)").then(() => {
db.run("INSERT INTO warnings (userId, level) VALUES (?, ?)", [message.author.id, 1]);
});
});