Backend-js is a layer built above expressjs
and socket.io
to enable the Behaviours Framework for Node.js applications.
npm install backend-js
var backend = require('backend-js');
var App = backend.app(__dirname + '/behaviours', {
path: '/api/v1',
parser: 'json',
port: 8383,
origins: '*'
});
Parameter | Type | Description |
---|---|---|
path |
string | Path to the behaviours directory. |
options |
object | App configuration options. |
options.path |
string | Prefix path appended to the beginning of routes. |
options.parser |
string | Supports json , text , raw , or urlencoded . Parses request/response body accordingly. |
options.parserOptions |
object | Options for body-parser. |
options.port |
number | Port of the server. |
options.origins |
string | Allowed AJAX origins (comma-separated or "*" for all). |
options.static |
object | Options for serving static files. |
options.static.route |
string | Virtual route for static content. |
options.static.path |
string | Path to directory containing static files. |
Returns | Type | Description |
---|---|---|
App |
function | Express app instance (API reference). |
var backend = require('backend-js');
var model = backend.model();
var User = model({
name: 'User'
}, {
username: String,
password: String
});
Parameter | Type | Description |
---|---|---|
options |
string | object | Model name or full configuration object. |
options.name |
string | Name of the model. |
options.features |
object | Custom model features passed to the data access layer. |
options.query |
array | Default query represented by QueryExpression. |
attributes |
object | Schema attributes (String, Number, Date). Supports nested objects or arrays. |
plugins |
array | Array of mongoose plugins. |
Returns | Type | Description |
---|---|---|
ModelEntity |
function | Constructor for the defined model entity. |
var QueryExpression = backend.QueryExpression;
var ComparisonOperators = {
EQUAL: '=',
NE: '$ne'
};
var LogicalOperators = {
AND: '$and',
OR: '$or',
NOT: '$not'
};
backend.setComparisonOperators(ComparisonOperators);
backend.setLogicalOperators(LogicalOperators);
var query = [
new QueryExpression({
fieldName: 'username',
comparisonOperator: ComparisonOperators.EQUAL,
fieldValue: 'name'
}),
new QueryExpression({
fieldName: 'password',
comparisonOperator: ComparisonOperators.EQUAL,
fieldValue: 'pass',
logicalOperator: LogicalOperators.AND,
contextualLevel: 0
})
];
Parameter | Type | Description |
---|---|---|
operators |
object | Key-value pairs mapping to database engine operators (used by data access). |
Parameter | Type | Description |
---|---|---|
options.fieldName |
string | Field name in the model. |
options.comparisonOperator |
string | Comparison operator (= , $ne , etc.). |
options.fieldValue |
any | Value to compare against the field. |
options.logicalOperator |
string | Logical operator ($and , $or , $not ). |
options.contextualLevel |
number | Nesting level of conditions (for grouping). |
Returns | Type | Description |
---|---|---|
expression |
object | Query expression object used in queries. |
var ModelEntity = backend.ModelEntity;
var entity = new ModelEntity({});
var model = entity.getObjectConstructor();
var schema = entity.getObjectAttributes();
var features = entity.getObjectFeatures();
var query = entity.getObjectQuery();
Parameter | Type | Description |
---|---|---|
features |
object | Special model functionalities passed to the data access layer. |
Returns | Type | Description |
---|---|---|
entity |
object | Holds model metadata and schema. |
Entity Methods:
getObjectConstructor()
β returns model constructorgetObjectAttributes()
β returns schema fieldsgetObjectFeatures()
β returns model featuresgetObjectQuery()
β returns default query array
var getUsers = behaviour({
name: 'GetUsers',
version: '1',
path: '/users',
method: 'GET'
}, function(init) {
return function() {
var self = init.apply(this, arguments).self();
self.begin('Query', function(key, businessController, operation) {
operation
.entity(new User())
.append(true)
.apply();
});
};
});
Parameter | Type | Description |
---|---|---|
option |
object | API metadata (name, version, path, method, params, returns). |
constructor |
function | Business logic with database or response mapping functionality. |
Define your own data access layer like below:
var backend = require('backend-js');
var ModelController = function () {
self.removeObjects = function (queryExprs, entity, callback) {
// do remove
};
self.addObjects = function (objsAttributes, entity, callback) {
// do add new
};
self.getObjects = function (queryExprs, entity, callback) {
// do select
};
self.save = function (callback, oldSession) {
// do save
};
};
ModelController.defineEntity = function (name, attributes) {
// define entity
return entity;
};
ModelController.prototype.constructor = ModelController;
backend.setModelController(new ModelController());
Explore the official starter to learn Backend-JS with examples:
π https://github.com/QuaNode/BeamJS-Start