Dead simple framework on top of koa
Koa framework is a basic bootstrap library for creating a Koa server. It provides a router constructor with basic middleware such as a request parser and validator.
npm install koa-framework --save
A koa instance is returned so see koa documentation for more details.
let koa = require('koa-framework');
// koa server instance
let app = koa();
Request body is automatically parsed using koa-body-parser. Both json
and form
encodings are supported.
See koa-router documentation for detailed documentation.
let router = app.router();
router.get('/test', function *() {
this.body = 'Wow! just like Express';
});
// mount router
app.mount(router);
Data validation
One of the key aspects of a web application is data validation. koa-framework
supports request data validation using jsonschema. If data does not pass validation, the server returns a 400 Bad Request
error. In non production environments, the response body is populated with the validation errors.
let schema = {
params: {
properties: {
object: { type: 'string', required: true }
}
},
query: {
properties: {
something: { type: 'string', required: false } }
}
},
body: {
properties: {
password: { type: 'string', required: true, minLength: 10 }
}
}
};
router.post('/secret/:object', app.schema(schema), function *() {
let body = this.request.body;
if (body.password === 'the best password ever') {
this.body = 'You got it boss';
} else {
this.throw(403, 'Pffttt...');
}
});
The server returns the following response body on schema validation error. The validationErrors
property is the errors
property returned by jsonschema
on validation.
{
"error": "Invalid request parameters",
"validationErrors": [{
"property": "request.body",
"message": "Property password is required",
"schema": { ... },
"instance": ...
}]
}
Namespaced routes and middleware
// private routes
let paymentsRouter = app.router({
prefix: '/payments'
});
// middleware for /payments/*
paymentsRouter.use(ensureAuthenticated);
// POST /payments/transfer
paymentsRouter.post('/transfer', handleTransfer);
// public routes
let sharedRouter = app.router({
prefix: '/shared'
});
// GET /shared/lolcat
sharedRouter.get('/lolcat', getLolcat);
app.mount(paymentsRouter, sharedRouter);
// alternatively
app.mount(paymentsRouter);
app.mount(sharedRouter);
app.listen();
koa-framework
comes bundled with koa-body-parser, koa-error and koa-x-request-id
Middlewares are completely configurable with options being passed to the downstream middleware as is. Optionally, individual middlewares can also be turned off completely. An example is shown below:
var app = koa({
middleware: {
error: { enabled: false },
parse: { jsonLimit: '512kb' },
requestId: { key: 'x-request-id'. inject: false }
}
});