0.6.22 • Published 10 years ago
nis-model v0.6.22
Advanced, database agnostic ODM
Sometimes your application is not a simple to-do list and you need to write complex business logic. Rather than strictly predefined CRUD methods and hooks, nis-model is a set of tools which you can use to write your own logic, data sources and reusable behaviours.
- Scheme (inheritable, with nested models)
- Validations (extendable validations and sanitizers)
- Defaults (inheritable default settings)
- Methods (inheritable instance and constructor methods)
- Queries (inheritable, extendable and cacheable query builder methods)
- Hooks (inheritable and extendable)
- Relations with integrity maintaining hooks
- Data sources with optimistic locks (Memory, Json file, Mongo, Rest, Elastic search)
- Caching (synchronize workers' cache across nodejs cluster)
- Behaviours (Orderable, Tree)
Installation
npm install nis-model
Usage
var Model = require('nis-model');
/*
* create employee model, which:
* 1. is stored in mongo database
* 2. is in tree structure
* 3. is orderable
* 4. can handle process of changing job - it is not just a simple update,
* it has to be confirmed by HR department
*/
var Employee = Model.define('Employee', [ 'MongoDataSource', 'Orderable', 'Tree' ], {
name:{ isString:true },
surname:{ isString:true },
salary:{ isNumber:true, round:2 },
job:{ isIn:[ 'project_manager', 'sales', 'support'] },
jobConfirmed:{ isBool:true },
// address as submodel
address: { model: Model('Address') },
// or array of submodels
addresses: { arrayOf: Model('Address') }
});
// define connection details by extending inherited defaults
Employee.extendDefaults({
connection:{
host: 'localhost',
port: 27017,
database:'myapp',
collection:'employees'
}
});
// now, add hookable method
Employee.prototype.changeJob = Employee.wrapHooks('changeJob', function(newJob, cb){
var employee = this;
employee.job = newJob;
employee.jobConfirmed = false;
employee.update(cb);
});
// register "beforeChangeJob" listener
Employee.on('beforeChangeJob', function(next){
// notify HR department
next();
});
// init model, this will ensure indexes or do some work to init datastore
Employee.init();
// now we can get employee and change his job
Employee.collection().find({ name:'Chuck', surname:'Norris' }).one(function(err, employee){
employee.changeJob('super_agent', function(err){
// job changed, and HR department was notified
// (but I am sure they can't change Chuck's job - nobody can :)
});
});
// if you need to define a new type of employee, just inherit it from Employee.
// It will inherit all methods including registered events like "beforeJobChange".
var SuperEmployee = Model.define('SuperEmployee', ['Employee']);
0.6.22
10 years ago
0.6.21
10 years ago
0.6.20
10 years ago
0.6.19
10 years ago
0.6.18
10 years ago
0.6.17
10 years ago
0.6.16
10 years ago
0.6.15
10 years ago
0.6.14
10 years ago
0.6.13
10 years ago
0.6.12
10 years ago
0.6.11
10 years ago
0.6.10
10 years ago
0.6.9
10 years ago
0.6.8
10 years ago
0.6.7
10 years ago
0.6.6
10 years ago
0.6.5
10 years ago
0.6.4
10 years ago
0.6.3
11 years ago
0.6.2
11 years ago
0.6.1
11 years ago
0.6.0
11 years ago