🦔
SQLite 自分用モジュール テンプレート | Express
Express プロジェクトで SQLite を使う場合の自作モジュールファイル
ログやクエリを確認したり、必要に応じてオフにしたりできるようにするため.
database.js
// Import module "sqlite3"
const sqlite3 = require("sqlite3");
// ログを表示するかをここで切り替える, 環境変数等を使ったほうがよいかも
const ADVANCED_LOG = false;
// データベースファイルパスのリスト
module.exports.LS = {};
// Initialize
// ファイルパスを引数に DatabaseHandler を返す
module.exports.init = (file) => {
return new DatabaseHandler(file);
}
//
class DatabaseHandler {
constructor (databaseFile) {
this.file = databaseFile;
this.database = new sqlite3.Database(databaseFile);
console.log(`SQLite[Load] "${databaseFile}"`);
}
get(query, bindValues, callback = ()=>{}){
console.log(`SQLite.Get > "${query}"\n> `, bindValues);
this.database.get(query, bindValues, (err, row) => {
if (ADVANCED_LOG) console.log("SQLite.Result > ", row);
if (ADVANCED_LOG && err) console.log("SQLite.Result.Err > ", err);
callback(err, row);
});
}
all(query, bindValues, callback = ()=>{}){
console.log(`SQLite.All > "${query}"\n> `, bindValues);
this.database.all(query, bindValues, (err, rows) => {
if (ADVANCED_LOG) console.log("SQLite.Result > ", rows);
if (ADVANCED_LOG && err) console.log("SQLite.Result.Err > ", err);
callback(err, rows);
});
}
run(query, bindValues, callback = ()=>{}){
console.log(`SQLite.Run > "${query}"\n> `, bindValues);
this.database.run(query, bindValues, (err) => {
if (ADVANCED_LOG && err) console.log("SQLite.Result.Err > ", err);
callback(err);
});
}
serialize(func){
console.log(`SQLite.Serialize --- BEGIN ---`);
this.database.serialize(func);
}
close(errorHandler = (err) => {}){
console.log(`SQLite[Close] "${this.file}"`);
if (errorHandler === undefined) {
this.database.close(err => { if (err) console.error(err); });
} else {
this.database.close(errorHandler);
}
}
}
使い方
sample.js
const database = require("./database.js");
const db = database.init(database.LS.USERS);
db.get("", () => {}); ....
Discussion