Introduction to Koa Javascript (Koa Js): PROS and CONS
Koa Js
Koa is a new web framework designed by the team behind Express, which aims to be a smaller, more expressive, and more robust foundation for web applications and APIs. Through leveraging generators Koa allows you to ditch callbacks and greatly increase error-handling. Koa does not bundle any middleware within core, and provides an elegant suite of methods that make writing servers fast and enjoyable.
A Koa application is an object containing an array of middleware functions which are composed and executed in a stack-like manner upon request. Koa is similar to many other middleware systems that you may have encountered such as Ruby’s Rack, Connect, and so on – however a key design decision was made to provide high level “sugar” at the otherwise low-level middleware layer. This improves interoperability, robustness, and makes writing middleware much more enjoyable.
This includes methods for common tasks like content-negotiation, cache freshness, proxy support, and redirection among others. Despite supplying a reasonably large number of helpful methods Koa maintains a small footprint, as no middleware are bundled.
The obligatory hello world application:
const Koa = require(‘koa’);
const app = new Koa();
app.use(ctx => {
ctx.body = ‘Hello World’;
});
app.listen(3000);
Learn koa if:
You generally like being ahead of the curve and on the bleeding edge
Your project needs to be future-proof, long-lived and easy to maintain in the longer run
You come from a programming language that has async functions, or a synchronous-style of dealing with asynchronous actions without callbacks
Koa vs Express
Philosophically, Koa aims to “fix and replace node”, whereas Express “augments node”. Koa uses promises and async functions to rid apps of callback hell and simplify error handling. It exposes its own ctx.request and ctx.response objects instead of node’s req and res objects.
Express, on the other hand, augments node’s req and res objects with additional properties and methods and includes many other “framework” features, such as routing and templating, which Koa does not.
Thus, Koa can be viewed as an abstraction of node.js’s http modules, where as Express is an application framework for node.js.
How is Koa different than Connect/Express?
- Generated-based control flow
- No callback hell.
- Better error handling through try/catch.
- No need for domains.
- Koa is barebones
- Unlike both Connect and Express, Koa does not include any middleware.
- Unlike Express, routing is not provided.
- Unlike Express, many convenience utilities are not provided. For example, sending files.
- Koa is more modular.
- Koa relies less on middleware
- For example, instead of a “body parsing” middleware, you would instead use a body parsing function.
- Koa abstracts node’s request/response
- Less hackery.
- Better user experience.
- Proper stream handling.
PROS
- Generator support from ground up Using generators (a bleeding edge feature, even for Node.js) would clean up your code from the mess caused by all those callbacks; making your code more manageable.
- Development team has a proven track record
- Koa is developed by the team behind a widely used node.js framework (express.js).
- Extremely lightweight
- Koa is very lightweight with just 550 lines of code.
- sync/await keywords are supported and has transcended beyond generator functions
- Generators functions are of course a huge plus, but at the time Koa team has transcended generations functions and shifted towards async/await style programming. It has made the Koa best framework available in the market.
CONS
- Community is relatively small.
- Not compatible with express style middleware.
- Koa uses generators which are not compatible with any other type of Node.js framework middleware.