helpers.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. var fs = require('fs');
  2. var protocols = {
  3. http : require('http'),
  4. https : require('https')
  5. }
  6. var keys = {
  7. cert : fs.readFileSync(__dirname + '/keys/ssl.cert'),
  8. key : fs.readFileSync(__dirname + '/keys/ssl.key')
  9. }
  10. var helpers = {};
  11. helpers.server = function(opts, cb) {
  12. var defaults = {
  13. code : 200,
  14. headers : {'Content-Type': 'application/json'}
  15. }
  16. var mirror_response = function(req) {
  17. return JSON.stringify({
  18. headers: req.headers,
  19. body: req.body
  20. })
  21. }
  22. var get = function(what) {
  23. if (!opts[what])
  24. return defaults[what];
  25. if (typeof opts[what] == 'function')
  26. return opts[what](); // set them at runtime
  27. else
  28. return opts[what];
  29. }
  30. var finish = function(req, res) {
  31. res.writeHead(get('code'), get('headers'));
  32. res.end(opts.response || mirror_response(req));
  33. }
  34. var handler = function(req, res) {
  35. req.setEncoding('utf8'); // get as string
  36. req.body = '';
  37. req.on('data', function(str) { req.body += str })
  38. req.socket.on('error', function(e) {
  39. // res.writeHead(500, {'Content-Type': 'text/plain'});
  40. // res.end('Error: ' + e.message);
  41. })
  42. setTimeout(function(){
  43. finish(req, res);
  44. }, opts.wait || 0);
  45. };
  46. var protocol = opts.protocol || 'http';
  47. var server;
  48. if (protocol == 'https')
  49. server = protocols[protocol].createServer(keys, handler);
  50. else
  51. server = protocols[protocol].createServer(handler);
  52. server.listen(opts.port, cb);
  53. return server;
  54. }
  55. module.exports = helpers;