var fs = require("fs"); function berkeleydb(fn) { var db; var bdb_lib = require("berkeleydb"); var dbenv = new bdb_lib.DbEnv(); var bdb_status = dbenv.open("./search/db/env"); if (bdb_status) { console.log("open dbenv failed:", bdb_status); process.exit(); } fn = "./" + fn + ".db"; function exitHandler(options, err) { if (db) db.close(); // if (options.cleanup) console.log('clean'); if (err) console.log(err.stack); if (options.exit) process.exit(); } // do something when app is closing process.on("exit", exitHandler.bind(null, { cleanup: true })); // catches ctrl+c event process.on("SIGINT", exitHandler.bind(null, { exit: true })); // catches "kill pid" (for example: nodemon restart) process.on("SIGUSR1", exitHandler.bind(null, { exit: true })); process.on("SIGUSR2", exitHandler.bind(null, { exit: true })); //catches uncaught exceptions process.on("uncaughtException", exitHandler.bind(null, { exit: true })); function open(fn) { if (db) db.close(); var _db = new bdb_lib.Db(dbenv); var bdb_status = _db.open(fn); if (bdb_status) { console.log("openĀ " + fn + " failed:", bdb_status); process.exit(); } db = _db; } open(fn); return { put: function (term, serialized) { db.put(term, serialized); }, get: function (term) { return db.get(term); }, }; } function jsondb(fn) { let db; fn = "./" + fn + ".db"; function exitHandler(options, err) { if (db) { fs.writeFileSync(fn, JSON.stringify(db, false, 0)); } // if (options.cleanup) console.log('clean'); if (err) console.log(err.stack); if (options.exit) process.exit(); } // do something when app is closing process.on("exit", exitHandler.bind(null, { cleanup: true })); // catches ctrl+c event process.on("SIGINT", exitHandler.bind(null, { exit: true })); // catches "kill pid" (for example: nodemon restart) process.on("SIGUSR1", exitHandler.bind(null, { exit: true })); process.on("SIGUSR2", exitHandler.bind(null, { exit: true })); //catches uncaught exceptions process.on("uncaughtException", exitHandler.bind(null, { exit: true })); if (fs.existsSync(fn)) { try { db = JSON.parse(fs.readFileSync(fn)); } catch (err) { console.error("couldn't read " + fn); process.exit(); } } else { db = {}; } return { put: function (term, serialized) { db[term] = serialized; }, get: function (term) { return db[term]; }, }; } module.exports = process.env.USE_BDB === "true" ? berkeleydb : jsondb;