Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

dalicious

Package Overview
Dependencies
Maintainers
2
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

dalicious

_dalicious_ is a toolkit for your data access layer.

  • 0.0.2
  • latest
  • npm
  • Socket score

Version published
Weekly downloads
0
Maintainers
2
Weekly downloads
 
Created
Source

dalicious

dalicious is a toolkit for your data access layer.

  • intuitive transactions and models
  • little sugar
  • multi-database support in same process

Currently supports:

Postgres
Sql Server

Example

Initializing

var dalicious = require('dalicious');
var Mssql = require('dalicious/mssql');
var Store = Mssql.define({user: 'sa', password: 'secret'});
var Dal = dalicious.define(Store);
var Model = dalicious.Model;

// define your models using prototypical inheritance. Model base can
// be your own class intead of dalicious.Model
function User() {
  Model.apply(this, arguments);
}
util.inherits(User);
User.prototype.create = function(email, cb) {
  this.dao.query({insert: {email: email}, returning: ['id']}).one(cb);
});

// register models
Dal.dal('User', {model: User, table: 'Users'});
Dal.dalify(function(err) {
  // dal is ready for use
});

Using

var dal = new Dal();

// Use your model
dal.User.create(function(err, id) {
  ...
});

// Use low-level data access object (DAO)
dal.store.UserDao.findById(id, function(err, row) {
    ...
});

dal.store.UserDao.query({
  select: ['id', 'name'],
  where: {id: id}
}).all(function(err, rows) {
    ...
});

// Use plain sql
dal
  .sql('select * from Users where createdAt > $1', [new Date('1-9-2013')])
  .all(function(err, rows) {
    ...
  });

// use T-sql (sql server)
dal.store
  .tsql(
    'insert into images (image) output inserted.id values (@buffer)',
    {buffer: buffer}
  )
  .all(function(err, rows) {
    ...
  });

Transactions

var tx = dal.transactable();
var userId;

async.series([
  function(cb) {
    tx.begin(cb)
  },
  function(cb) {
    tx.User.query(...).function(err, id) { userId = id; cb() }
  },
  function(cb) {
    tx.Account.query(...)
  },
  function(cb) {
    tx.sql(...)
  }
], function(err) {
  if (err) return tx.rollback();
  tx.commit();
})

Multi DB

var dalicious = require('dalicious');
var Mssql = require('dalicious/mssql');
var MainDb = Mssql.define({user: 'sa', password: 'secret', database: 'main'});
var ReportDb = Mssql.define({user: 'sa', password: 'secret', database: 'report'});

var Dal = dalicious.define(MainDb);
var dal = new Dal();
var ReportDal = dalicious.define(ReportDb);
var reportDal = new ReportDal();

...

Understanding

Data Access Layer (DAL)

  • has a database specific store
  • has 1 or more models

Store

  • database storage
  • has 1 or more data access objects

Model

  • encapsulates business logic
  • may use one or more Data Access Objects
  • may use plain SQL or store-specific dialects (mssql tsql)
  • has a default Data Access Object named, this.dao

Data Access Object (DAO)

  • 1-1 mapping to table or collection
  • data access logic not business logic
  • has a schema for inspection

FAQs

Package last updated on 08 Dec 2015

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc