node package manager
Stop writing boring code. Discover, share, and reuse within your team. Create a free org »

restify-microservice

restify-microservice

Build Status

a restify.js based microservice library, inspired by sails.js

Install

npm install --save restify-microservice

Purpose

To provide a highly customizable platform for a well-organized restify.js app, using hooks. By default, restify-microservice comes bundled with hooks for middleware, models, controllers, services, policies, routing, etc. However, this module allows you to implement custom hooks extremely easily, as well as disable, override, or reorder the default hooks. More importantly, this module makes no assumption regarding which other third party libraries (ORMs, middleware, templating engines, etc) you'd like to use in your app. In fact, using restify is entirely optional, and can be disabled by excluding the server hook or implementing your own

Docs

  1. Getting Started
  2. Controllers
  3. Services
  4. Routing (Part I)
  5. Policies
  6. Routing (Part II)
  7. Models and Connections

Configuration

Bundled Hooks

restify-microservice comes bundled with the following hooks:

  • connections
  • models
  • server
  • services
  • policies
  • controllers
  • routes

The default hooks configuration is shown below. You can override this by providing your own configuration in config/hooks.js.

module.exports = [
    'connections',
    'models',
    'server',
    'services',
    'policies',
    'controllers',
    'routes'
];

To implement your own hook configuration, define your own config/hooks.js file:

config/hooks.js

module.exports = [
    'server',
    'services',
    require('../hooks/my-hook.js'), // custom project hook 
    'controllers',
    'super-cool-hook', // installable hook 
    require('../hooks/my-own-routes-hook') // custom project hook 
];

Custom Hooks

Implementing a custom hook is as easy as requiring a file/module that exports a function that accepts a single callback. The function is bound to the microservice context, which allows you to manipulate any aspect of the microservice.

hooks/my-hook.js

module.exports = function(done) {
    var microservice = this;
 
    // this assumes that the `services` hook was run prior to this hook and that 
    // we implemented a service `app/services/dynamoDB.js` that exports a dynamoDB 
    // document client 
    microservice.services['dynamoDB'].put({
        TableName: 'service-logs',
        Item: {
            'service': 'my-service',
            'event': 'starting',
            'info': {
                'date': Date.now()
            }
        }
    }, function(err, data) {
        if (err) {
            microservice.log('error', err);
            return done(err);
        }
        done();
    });
};

Installable Hooks & Adapters

Hooks

To use these hooks, simply install them via npm install --save <insert hook name here> and require them in your config/hooks.js file.

Adapters

Testing

run all tests

npm test

run coverage

grunt coverage

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

License

Copyright (c) 2015 Chris Ludden. Licensed under the MIT license.