Skip to content

blugavere/node-repositories

Repository files navigation

Repositories

Generic storage implementations following a common interface.

NPM version NPM Downloads dependencies Status Build Status Coverage Status lerna

Installation

$ npm install --save repositories

Overview

Available Repositories:

Usage

const repositories = require('repositories');

AJAX

Store some data on a remote server implementing a RESTful API.

const AJAXRepository = require('repositories').AJAXRepository;
const ajaxRepo = new AJAXRepository('http://localhost:3000/api/cats');

ajaxRepo.add({name:'Fido'}, (err, data) => {
  console.log(data);
});

Redis

See detailed readme here.

const redis = require('redis');
const RedisRepository = require('repositories').RedisRepository;

const redisRepo = new RedisRepository(redis, 'Cats');

redisRepo.add({name:'Fido'}, (err, data) => {
  console.log(data);
  redisRepo.disconnect();
});

Sequelize (PostgreSQL)

/** requires you to install sequelize and pg */
const PostgreRepository = require('repositories').PostgreRepository;
const Sequelize = require('sequelize');

sequelize = new Sequelize('test', 'admin', 'admin', {
  host: 'localhost',
  dialect: 'postgres'
});

const modelName = 'clients';

var schema = sequelize.define(modelName, {
  _id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
    autoIncrement: true
  },
  name: Sequelize.STRING
});

const sequelizeRepo = new PostgreRepository(sequelize, modelName);

sequelizeRepo.add({name:'Fido'}, (err, data) => {
  console.log(data);
});

sequelizeRepo.findAll((err, data) => {
  console.log(data);
  sequelizeRepo.disconnect();
});

Cassandra

const CassandraRepository = require('repositories').CassandraRepository;
const Cassandra = require('express-cassandra');

const cassandra = Cassandra.createClient({
  clientOptions: {
    contactPoints: ['127.0.0.1'],
    protocolOptions: { port: 9042 },
    keyspace: 'mykeyspace',
    queryOptions: { consistency: Cassandra.consistencies.one }
  },
  ormOptions: {
    defaultReplicationStrategy: {
      class: 'SimpleStrategy',
      replication_factor: 1
    },
    migration: 'safe',
    createKeyspace: true
  }
});

export const modelName = 'Cats';
export const schema = {
  fields: {
    _id: 'text',
    name: 'text'
  },
  key: ['_id']
};

let cassandraRepo;
cassandra.connect(() => {
  cassandra.loadSchema(modelName, schema);
  cassandraRepo = new CassandraRepository(cassandra, modelName);
  
  cassandraRepo.add({name:'Fido'}, (err, data) => {
    console.log(data);
    cassandraRepo.disconnect();
  });
});

Filesystem Repository

Create a database out of a local file. Configurable for different file formats.

const FSRepository = require('repositories').FSRepository;
const repo = new FSRepository('./data.json');

// default json format
const cat = { name : 'Fido' };

repo.add(cat, (err, data) => {
  console.log(data);
  repo.disconnect(); //not really
});

// ini istead of json
const INISerializer = require('repositories/src/serializers/INISerializer');
repo.use(new INISerializer());

// ...

Mongoose Repository

See detailed readme here.

const mongoose = require('mongoose');
const modelName = 'cats';
const schema = new mongoose.Schema({
  name: { type: String }
});
mongoose.model(modelName, schema);
mongoose.connect('mongodb://localhost');

const MongooseRepository = require('repositories').MongooseRepository;
const repo = new MongooseRepository(mongoose, modelName);

// default json format
const cat = { name : 'Fido' };

repo.add(cat, (err, data) => {
  console.log(data);
  repo.disconnect();
});

MongoDB Native Repository

const MongoClient = require('mongodb').MongoClient;
const collection = 'cats';
const MongoRepository = require('repositories').MongoRepository;

let repo;

MongoClient.connect('mongodb://admin:admin@localhost:27017/travis', (err, db) => {
  if (err) {
    // Handle error and return (or throw)
  }

  repo = new MongoRepository(db, collection);

  repo.add({name:'Fido'}, (err, data) => {
    console.log(data);
    repo.disconnect();
  });
}

In-Memory Repository

See readme here.

Contributing

Make sure the tests pass :D

License

MIT © Ben Lugavere