🦔

SQLite 自分用モジュール テンプレート | Express

2024/02/08に公開

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