dbfree-node

Local file storage - no dbs

dbfree-node

Just a simple key value store, local file system, json object
No muss no fuss

 
// Example plugin 
// A plugin extends the capability of dbfree 
 
var logstuff = function(settings){
    return {
        // runs when the db is started, return a value to set the in-memory object 
        initfunction(){
                console.log('Plugin loaded');
        },
        // the following run before and after each data change 
        // the same params for get and set are passed in 
        before_getfunction(otk){
                console.log('** Plugin ** Before getting table, key::', t, k);
        },
        after_getfunction(otkv){
                console.log('** Plugin ** After getting table, key::', t, k);
        },
        // plugins don't modify the data being saved 
        before_setfunction(otkv){
                console.log('** Plugin ** Before setting table, key::', t, k, v);
        },
        after_setfunction(otkv){
                console.log('** Plugin ** After setting table, key::', t, k, v);
        }
     }
}
 
 
// Another plugin, to persist all data in a file.  See /dbfree-node-plugins for plugins. 
// A different plugin could be made to put each table in a different file, save files as CSV, whatever.. 
 
var filebacked = function(options){
        options = options || {};
        var fs = require('fs');
        var path = ('path' in options) ? options.path : ".";
        if(!fs.existsSync(path)) fs.mkdir(path);
        var dbfn = path + '/db.json';
 
        return {
 
                initfunction(){
                    // init file if not exists 
                    if(!fs.existsSync(dbfn)) fs.writeFileSync(dbfn, "{}");
                    // load data from file into memory 
                    return JSON.parse(fs.readFileSync(dbfn))
                },
 
                before_getfunction(otk){
                    // no need 
                },
 
                after_getfunction(otkv){
                    // no need 
                },
 
                before_setfunction(otkv){
                    // no need 
                },
 
                after_setfunction(otkv){
                    // dump entire object to disk 
                    fs.writeFileSync(dbfn, JSON.stringify(o));
                },
        }
}
 
// Run a test - with both plugins 
 
var     db = require('./dbfree-node.js')({ plugins:[ logstuff(), filebacked() ] } );
db.log = console.log;  // log stuff 
 
        console.log( db.set('table1', 'key1', { name: 'chris' }), db.get('table1', 'key1')  );
        console.log( db.set('table1', 'key2', { name: 'brandon' }), db.get('table1', 'key2')  );
        console.log( db.set('table2', 'key1', { name: 'john' }), db.get('table2', 'key1')  );
        
        console.log('Clear table 2', db.set('table2'), db.get('table2', 'key1') );
        
        console.log('All of table1::', db.get('table1'));
        console.log('All DB::', db.get());