a restify.js based microservice library, inspired by sails.js
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
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.
- Getting Started
- Controllers
- Services
- Routing (Part I)
- Policies
- Routing (Part II)
- Models and Connections
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.
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'
];
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();
};
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.
run all tests
npm test
run coverage
grunt coverage
- 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
Copyright (c) 2016 Chris Ludden. Licensed under the MIT license.