Creating microservices with koa inspired by zeit/micro
- Easy. You just need to learn
koa. - Micro. The whole project is ~100 lines of code.
- Agile. Super easy deployment and containerization.
- Simple. Oriented for single purpose modules (function).
- Explicit. No middleware. Modules declare all dependencies.
- Bulit-in
koa-bodyparse.
The following example sleep.js will wait before responding (without blocking!)
const sleep = require('then-sleep');
module.exports = async function ({ request, response }) {
await sleep(500);
response.status = 200;
response.body = 'woot';
};To run the microservice on port 3000, use the micro-koa command:
micro-koa sleep.jsTo run the microservice on port 3000 and localhost instead of listening on every interface, use the micro-koa command:
micro-koa -H localhost sleep.jsInstall the package (requires at least Node v4):
npm install --save micro-koaAnd start using it in your package.json file:
"main": "index.js",
"scripts": {
"start": "micro-koa"
}Then write your index.js (see above for an example).
After that, you can make the server run by executing the following command:
npm startmicro(fn)
-
This function is exposed as the
defaultexport. -
Use
require('micro-koa'). -
Returns a
http.Servercreated bykoathat uses the providedfnas the last middleware. -
The supplied function is run with
await. It can beasync! -
Example:
const micro = require('micro-koa'); const sleep = require('then-sleep'); const srv = micro(async function ({ request, response }) { await sleep(500); response.status = 200; response.body = 'woot'; }); srv.listen(3000);
send(res, statusCode, data = null)
-
Use
require('micro-koa').send. -
statusCodeis aNumberwith the HTTP error code, and must always be supplied. -
If
datais supplied it is sent in the response. Different input types are processed appropriately, andContent-TypeandContent-Lengthare automatically set.Stream:datais piped as anoctet-stream. Note: it is your responsibility to handle theerrorevent in this case (usually, simply logging the error and aborting the response is enough).Buffer:datais written as anoctet-stream.object:datais serialized as JSON.string:datais written as-is.
-
Example
const { send } = require('micro-koa') module.exports = async function ({ request, response }) { send(response, 400, { error: 'Please use a valid email' }); }
createError(code, msg, orig)
- Use
require('micro-koa').createError. - Creates an error object with a
statusCode. - Useful for easily throwing errors with HTTP status codes, which are interpreted by the built-in error handling.
origsetserror.originalErrorwhich identifies the original error (if any).
You can use the micro-koa CLI for npm start:
{
"name": "my-microservice",
"dependencies": {
"micro-koa": "x.y.z"
},
"main": "microservice.js",
"scripts": {
"start": "micro-koa -p 3000"
}
}Then simply run npm start!
This package couldn't exist without the awesome micro and koa packages!
MIT © C.T. Lin