mind
v0.0.2
Published
mind is lightweight asynchronous persistence layer for node
Downloads
10
Readme
node-mind
mind is not a database / minimal database is lightweight asynchronous persistence layer for node.
mind was inspired by anti-db's idea that often, "you don't need a database, you need an in-memory object that saves itself to disk". However, I needed Windows support, evented API, and asynchronous loading, which, while simpler and more elegant in implementation, it forgoes.
Install
npm install mindFeatures
- Evented API, as well as a simplified single-callback wrapper
- Automatically persists database state
- Autosave at intervals, and at
process.exit(); - On non-Windows systems, also autosave on
SIGINT,SIGHUP, andSIGQUIT.
- Autosave at intervals, and at
- Database autocreation
Usage
Evented API
var mind = require('mind');
var opts = { encoding: 'UTF-8', autosave: 60000 };
var dbm = new mind('path/to/db.json', opts);
dbm.on('open', function (e) {
console.log('[INFO] Opened db: ' + e.msg);
e.db['foo'] = 'bar';
e.db['baz'] = [1, 2, 3, 4];
});
dbm.on('close', function (e) {
console.log('[INFO] Closed db: ' + e.msg);
});
dbm.on('save', function (e) {
console.log('[INFO] Saved db: ' + e.msg);
});
dbm.on('error', function (e) {
console.error('[ERROR] Error in db: ' + e.msg);
console.error(e.error);
});
dbm.open();Callback API
var mind = require('mind');
mind.open('path/to/db.json', function (err, db, data) {
}, API
Class: MindManager
new MindManager(fn, opts)
fn: String - Path writeable by the node processopts: Object - Options hash containing any of:autosave: Number - ms between save operations (0 or negative disables autosave). Default:60000encoding: String - encoding used to read and write JSON file. Default:'UTF-8'
Create a new MindManager.
manager.open()
- Emits
openon success.
Open and read the database file, creating it if necessary.
manager.save()
- Emits
saveon success.
Asynchronously save the database file to disk.
manager.close()
- Emits
closeon success.
Synchronously closes the database file, persisting it to disk. This function
is synchronous to support non-autosaved use of mind, and is suitable for
calling within process.exit.
manager.startAutosave() / manager.stopAutosave()
Synchronously start and stop the autosave process.
MindManager.getManager(db)
db: Object - Database object for which to get the associatedMindManager
Get the MindManager for a particular database object.
MindManager.open(fn, cb(err, db, data), opts)
fn: seenew MindManageropts: seenew MindManagercb: Callback used to respond to all events emitted by the created manager:open: passesdbas the new database objecterror: passeserras original error thrown, andopen,save,close,error: passesdataas the complete event data object
Handles the creation of a manager object in a simplified single-callback
model. It is recommended to not bind your callback to any particular context
so you can access the manager instance at this. If you must, though,
the instance managing a particular db object can be accessed by:
mind.getManager(db)Events
open(event)
event.db: The database object opened.
event.msg: Any message regarding the open operation.
Emitted on successful opening of a database.
close(event)
event.msg: Any message regarding the close operation.
Emitted on successful closing of a database.
save(event)
event.msg: Any message regarding the save operation.
Emitted on successful save of a database to persistent storage, either explicitly-initiated or autosave.
error(event)
event.error: The originally-thrown error, if available.
event.msg: Any message regarding the error.
Emitted on any non-fatal caught error.
