я попытался заставить class DATABASE
создать db.run
для метода многократного использования, чтобы вызвать обновление для создания и удалить в SQLite с помощью обратного вызова,
вот мой код
const db = new sqlite3.Database("database.db", err => {
if (err) {
console.log(`can;t connected tp database, status: ${err}`);
} else {
console.log(`gotcha, succesfully connect to the database`);
}
});
class DATABASE {
static run(sql, params = [], callback) {
db.run(sql, params, function(err) {
if (err) {
throw err;
console.log(`something wrong with this ${sql}`);
console.log(err);
callback(err);
} else {
callback({"id" : this.lastID}) // this is could be null also
console.log("sucesfully fo this ", sql);
}
});
}
}
module.exports = DATABASE;
тогда я называю этот класс чем-то вроде этого:
const DATABASE = require("./setup.js");
const sqlite3 = require("sqlite3").verbose();
const db = new sqlite3.Database("database.db", err => {
if (err) {
console.log(`can;t connected tp database, status: ${err}`);
} else {
console.log(`gotcha, succesfully connect to the database`);
}
});
db.serialize(() => {
const departement = `CREATE TABLE IF NOT EXISTS departement(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
city TEXT
)`;
const employee = `CREATE TABLE IF NOT EXISTS employee(
id INTEGER PRIMARY KEY AUTOINCREMENT,
firstName TEXT NOT NULL,
lastName TEXT,
gender TEXT NOT NULL CHECK (gender IN ('Male', 'Female')),
email TEXT NOT NULL UNIQUE ,
phone TEXT,
dept_id INTEGER,
FOREIGN KEY (dept_id) REFERENCES departement(id)
)`;
DATABASE.run(departement);
DATABASE.run(employee);
// , err => {
// if (err) throw new Erro(`bugs here`);
// else console.log("sucess.....");
// });
});
вы можете видеть оператор else, callback({this.lastID})
когда я комментирую это и удаляю оператор else, создание таблицы было успешным,
но если я снова напишу это выражение else, появится сообщение об ошибке CALLBACK IS NOT FUNCTION
но создание таблицы было успешно
значение this.lastId равно способ, которым sqlite3 предоставляет эту информацию, если он помещает поле в объект 'this' в контексте выполнения (SQL, [params], function (err) {this.lastID }) функция обратного вызова ... но только для случаев, когда run вызывается с помощью оператора INSERT. В противном случае, это просто 0 , как сказано в этом уроке https://stackabuse.com/a-sqlite-tutorial-with-node-js/
Вы думаете, что мой обратный вызов неверен?