Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Comparison nodejs frameworks using Polls API

Comparison nodejs frameworks using Polls API

3 NodeJS implementations of Polls API.
All implementations are tested by Dredd.

Ladislav Prskavec

May 23, 2015
Tweet

More Decks by Ladislav Prskavec

Other Decks in Technology

Transcript

  1. express koa hapi github stars 18861 6174 4228 contributors 178

    59 116 downloads / w 525941 8769 11966 stack overflow 14853 138 66 npm -ls | wc -l 48 36 48 file size 3896 2000 50392
  2. "express": "^4.12.3" (function() { 'use strict'; var express = require('express');

    var app = express(); app.set('json spaces', 2); .... var server = app.listen(3003, function() { var host = server.address().address; var port = server.address().port; console.log('Example app listening at http://%s:%s', host, port); }); }());
  3. "hapi": "^8.4.0" var Hapi = require('hapi'); var server = new

    Hapi.Server(); server.connection({port: 3001}); .... // Start the server server.start(function() { console.log('Server running at:', server.info.uri); });
  4. "koa": "^0.20.0" "use strict"; var koa = require('koa'); var route

    = require('koa-route'); var app = koa(); require('koa-qs')(app); .... app.listen(3000);
  5. "express": "^4.12.3" app.get('/questions/:question_id', function(req, res) { res.status(200).json({"question":"Favourite programming language?"...}]}); });

    app.post('/questions/:question_id/choices/:choice_id', function(req, res) { res.set('Location', '/questions/' + req.params.question_id); res.status(201).send(''); });
  6. "hapi": "^8.4.0" server.route({ method: 'GET', path: '/questions/{question_id}', handler: function(request, reply)

    { reply({"question":"Favourite programming language?"...}); } }); server.route({ method: 'POST', path: '/questions/{question_id}/choices/{choice_id}', handler: function(request, reply) { reply().code(201).header('Location', '/questions/' + request.params.question_id); } });
  7. "koa": "^0.20.0" app.use(route.get('/questions/:question_id', function *(question_id) { this.body = {"question":"Favourite programming

    language?"...}; })); app.use(route.post('/questions/:question_id/choices/:choice_id', function *(question_id, choice_id) { this.status = 201; this.set('Location', '/questions/' + question_id); this.body = ''; }));
  8. Testing • Dredd var hooks = require('hooks'); var before =

    hooks.before; hooks.beforeEach(function(transaction) { if (transaction.expected.headers['Content-Type'] == 'application/json') { transaction.expected.headers['Content-Type'] = 'application/json; charset=utf-8'; } });
  9. Github repository of project: https://github.com/abtris/nodeschool-hk-2015-05-23 Ideas how project improve: •

    you can fork and contribute • you can try add 404, 500 pages • you can try persistent layer using Redis