Skip to content
This repository has been archived by the owner on Jun 20, 2020. It is now read-only.

Commit

Permalink
Improved error handling.
Browse files Browse the repository at this point in the history
  • Loading branch information
gmiroshnykov committed Nov 15, 2010
1 parent baee53e commit d4f8bc3
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 10 deletions.
17 changes: 17 additions & 0 deletions src/handlers/error.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
var errors = {
400: 'Bad Request',
404: 'Not Found',
500: 'Internal Server Error'
};

exports.showError = function (code, req, res) {
if (errors[code] == undefined) {
code = 500;
}

var message = code + ' ' + errors[code];
console.log('Response: HTTP ' + message);

res.writeHead(code, {'Content-Type': 'text/plain'});
res.end(message + '\n');
};
6 changes: 0 additions & 6 deletions src/handlers/error404.js

This file was deleted.

11 changes: 10 additions & 1 deletion src/handlers/json.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,22 @@ var util = require('util');
var aggregator = require('../aggregator');

exports.handler = function (req, res) {
if (req.method != 'POST') {
require('./error').showError(400, req, res);
return;
}

var requestBodyRaw = '';
req.on('data', function (chunk) {
requestBodyRaw += chunk;
});

req.on('end', function() {
var aggregatorRequest = JSON.parse(requestBodyRaw);
try {
var aggregatorRequest = JSON.parse(requestBodyRaw);
} catch (e) {
require('./error').showError(400, req, res);
}
var total = 0;
for (k in aggregatorRequest) {
total++;
Expand Down
6 changes: 3 additions & 3 deletions src/server.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
var http = require('http');

var handlers = {
json: require('./handlers/json').handler,
error404: require('./handlers/error404').handler
json: require('./handlers/json').handler,
error: require('./handlers/error')
};

var server = http.createServer(function(req, res) {
Expand All @@ -13,7 +13,7 @@ var server = http.createServer(function(req, res) {
return;
}

handlers.error404(req, res);
handlers.error.showError(404, req, res);
});

exports.server = server;
1 change: 1 addition & 0 deletions test/helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ var request = require('request');

var config = require('../config');
var baseUrl = 'http://' + config.http.host + ':' + config.http.port;
exports.baseUrl = baseUrl;

exports.makeJsonRequest = function(body, callback) {
var requestBodyRaw = JSON.stringify(body);
Expand Down
50 changes: 50 additions & 0 deletions test/test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
var util = require('util');
var simple_request = require('request');
var helpers = require('./helpers');

var testCase = require('nodeunit').testCase;
Expand All @@ -14,6 +15,8 @@ module.exports = testCase({
},

testJsonSingleGet: function (test) {
test.expect(4);

var urlGet = helpers.getDummyUrl('get');
var request = {
foo: {
Expand All @@ -34,6 +37,8 @@ module.exports = testCase({
},

testJsonSinglePost: function (test) {
test.expect(4);

var urlPost = helpers.getDummyUrl('post');
var request = {
foo: {
Expand All @@ -56,6 +61,8 @@ module.exports = testCase({
},

testJsonMultiGets: function (test) {
test.expect(6);

var urlGet = helpers.getDummyUrl('get');
var request = {
foo: {
Expand Down Expand Up @@ -83,6 +90,8 @@ module.exports = testCase({
},

testJsonMultiPosts: function (test) {
test.expect(6);

var urlPost = helpers.getDummyUrl('post');
var request = {
foo: {
Expand Down Expand Up @@ -114,6 +123,8 @@ module.exports = testCase({
},

testJsonMixGetAndPost: function (test) {
test.expect(6);

var urlGet = helpers.getDummyUrl('get');
var urlPost = helpers.getDummyUrl('post');
var request = {
Expand Down Expand Up @@ -142,5 +153,44 @@ module.exports = testCase({

test.done();
});
},

testJsonGetReturns400: function (test) {
test.expect(1);

var request = {
uri: helpers.baseUrl + '/json'
};
simple_request(request, function(err, response, body) {
test.equal(400, response.statusCode);
test.done();
});
},

testJsonEmptyPostReturns400: function (test) {
test.expect(1);

var request = {
method: 'POST',
uri: helpers.baseUrl + '/json'
};
simple_request(request, function(err, response, body) {
test.equal(400, response.statusCode);
test.done();
});
},

testJsonInvalidBodyReturns400: function (test) {
test.expect(1);

var request = {
method: 'POST',
uri: helpers.baseUrl + '/json',
body: 'foo=bar'
};
simple_request(request, function(err, response, body) {
test.equal(400, response.statusCode);
test.done();
});
}
});

0 comments on commit d4f8bc3

Please sign in to comment.