я попытался сделать class DATABASE для создания db.run для многократного использования метода, чтобы вызвать обновление для создания и удалить в SQLite с помощью обратного вызова,
вот мой код
const db = new sqlite3.Database("database.db", err => {
if (err) {
console.info(`can;t connected tp database, status: ${err}`);
} else {
console.info(`gotcha, succesfully connect to the database`);
}
});
class DATABASE {
static run(sql, params = [], callback) {
db.run(sql, params, function(err) {
if (err) {
throw err;
console.info(`something wrong with this ${sql}`);
console.info(err);
callback(err);
} else {
callback({"id" : this.lastID}) // this is could be null also
console.info("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.info(`can;t connected tp database, status: ${err}`);
} else {
console.info(`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.info("sucess.....");
// });
});
вы можете увидеть оператор else, callback({this.lastID}) когда я прокомментирую это и удалю оператор else, таблица будет создана успешно,
но если я снова напишу этот оператор else, сообщение об ошибке CALLBACK IS NOT FUNCTION но создать таблицу удалось
значение this.lastId равно способ, которым sqlite3 дает эту информацию, заключается в том, что он помещает поле в этот объект в контексте функции обратного вызова run(SQL, [params], function(err) { this.lastID }) ... но только для раз когда run вызывается с оператором INSERT. В противном случае это просто 0, как сказано в этом руководстве, https://stackabuse.com/a-sqlite-tutorial-with-node-js/
вы думали, что мой обратный вызов неверен ??





Проблема в том, как вы написали callback({this.lastID}), измените его на callback(this.lastID) или callback({"lastID" : this.lastID}).
`const DATABASE = require("./setup");
const sqlite3 = require("sqlite3").verbose();
const db = new sqlite3.Database("database.db", err => {
if (err) {
console.info(`can;t connected tp database, status: ${err}`);
} else {
console.info(`gotcha, succesfully connect to the database`);
}
});
var abc= function(arg){
console.info(arg);
};
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, abc);
DATABASE.run(employee, abc);
// , err => {
// if (err) throw new Erro(`bugs here`);
// else console.info("sucess.....");
// });
});`
А ты setup.js
const sqlite3 = require("sqlite3").verbose();
const db = new sqlite3.Database("database.db", err => {
if (err) {
console.info(`can;t connected tp database, status: ${err}`);
} else {
console.info(`gotcha, succesfully connect to the database`);
}
});
class DATABASE {
static run(sql, callback) {
db.run(sql, function(err) {
if (err) {
throw err;
console.info(`something wrong with this ${sql}`);
console.info(err);
callback(err);
} else {
callback(this.lastID) // this is could be null also
console.info("sucesfully fo this ", sql);
}
});
}
}
module.exports = DATABASE;
опечатка в вопросе, мой обратный вызов тоже был таким:
callback({"lastID" : this.lastID})но не сработал :(