Skip to content

cludden/mycro

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mycro

Build Status Codacy Badge

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

Install

With yeoman:

// install yeoman & the mycro generator globablly
npm install -g yo generator-mycro

// create a new mycro app
yo mycro my-app

The long way:

npm install --save mycro

Purpose

To provide a highly customizable platform for a well-organized restify.js or express.js app, using hooks. By default, mycro comes bundled with hooks for controllers, models & connections, middleware, policies, routing, services, 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 & start hooks 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

Hooks

At the most basic level, mycro is simply a serial asynchronous hook loader. By default, it comes bundled with hooks for implementing some of the most common patterns found in most restify apps, but you are free to include or exclude any or all of the included hooks, as well as write your own. Hooks can do anything you need them to, including but not limited to, interacting with a database, making api calls, loading third party modules, etc.

Bundled Hooks

mycro comes bundled with the following hooks:

  • server - creates a restify server and loads specified middleware
  • connections - handles all database/ORM connection configuration
  • models - loads models at mycro.models and executes any post processing
  • services - loads services at mycro.services
  • policies - loads policies at mycro.policies
  • controllers - loads controllers at mycro.controllers
  • routes - defines routes based on the route config specified in /app/routes.js
  • start - starts the server

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

config/hooks.js

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

Custom Hooks

Implementing a custom hook is super easy. A hook exports a function. The function is bound to the mycro application instance, which allows you to manipulate any aspect of the mycro application. Lastly, the function accepts a single callback. Make sure to call it when the hook is complete!

hooks/my-hook.js

module.exports = function myHook(done) {
    var mycro = this;
    // do some stuff
    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) 2016 Chris Ludden. Licensed under the MIT license.