node package manager



Build Status

Mystik (MkTable) is a generic Javascript DAO (Data Access Objects) for database systems including NoSQL databases, Redis, NodeJS support and REST API web service handling.

It also allows using the same query syntax on both client and server side to get data. Data could come from database or APIs in JSON format.

NOTE: All working features are covered in unit tests. Please help implement engines for other databases or fix defects. Thanks.


    $ npm install mystik-dao --save
    $ git clone
    $ npm install


The Demo can be run to demonstrate client side APIs for CRUD.

Start your local MongoDB for the demo, then launch the demo server and test at: http://localhost:3000

    $ node mystik/app/server.js


This is a very basic NodeJS example. Prepare DB connection:

    var engine = new require( 'lib/mkMongoEngine' )( db ),
        MkTable = require( 'lib/mkTable' );
    var Users = new MkTable(engine, 'users');   // you should have 'users' table/schema defined.

Do some queries and updating data on [users] table:

    Users.find( { zipcode: 94040 } ).then( function( res ) {
        // res.result is an array of rows in JSON.
    Users.update( { age: 21, zipcode: 92020 }, { uid: '_uid00' } ).then( function( res ) {
        // update user which has uid = '_uid00'

See more interface methods in mkTable.js

Client Side

From client side, you can use MkRestEngine to make call to "APIs" (NodeJS) which in turn will query database and return JSON data.

The query syntax is the same as back end.

See this example


Engine (Database Engine) is the persistence layer. It provides implementations for the interface methods of MkTable.

Engine is supposed to be swapped out easily to use another Database or Data source.

Engine methods should return result(s) or error(s) in the same wrapper format like examples below:

    Find() result(s):
        "timestamp": "1393728392387",
        "result": [
                "uid": "_uid0111",
                "age": null,
                "password": "wialrqxkrnovfgvi",
                "username": null,
                "zipcode": null
        "code": 0123,
        "message": "Some error message",
        "error" {
            // error object of the DB driver

Running Tests

Make sure you have Database installed and running. To run unit tests:

    $ jasmine-node ./test/
    # to stop the jasmine-node process when it is finished, use this: 
    $ jasmine-node --forceexit ./test/


- Q for promise.
- node-cassandra-cql - if Cassandra is used.
- redis/hiredis - if Redis is used.
- mongoose - if MongoDB is used.
- jasmine-node - for unit testing.


(MIT License)