Discord.JS | TypeError:无法读取null的属性“运行”

时间:2018-06-22 01:42:31

标签: javascript node.js discord.js

在尝试运行此代码时,我始终收到错误“ 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]);
      });
  });

2 个答案:

答案 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]);
      });
  });