mycro v0.5.3
mycro
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-appThe long way:
npm install --save mycroPurpose
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
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.modelsand 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.
- mycro-error
- Installs an error service that provides common error handling implementations
- mycro-json-api-ify
- Installs a json service that exports a json-api-ify serializer
- mycro-mongoose-rest
- Creates RESTful mongoose controllers for your mongoose models using restify-mongoose
- mycro-secrets
- A secret management hook (using vault) for mycro apps
- mycro-util-policies
- Installs utility polices (if, or, not, validate) for mycro apps
Adapters
- mycro-mongoose
- mongoose (MongoDB) adapter
- mycro-sequelize
- sequelize (PostgreSQL, MySQL, MSSQL, SQLite) adapter
- mycro-vogels
- vogels (DynamoDB) adapter.
Testing
run all tests
npm testrun coverage
grunt coverageContributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create new Pull Request
License
Copyright (c) 2016 Chris Ludden. Licensed under the MIT license.