| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | var fs = require('fs');var protocols = {  http  : require('http'),  https : require('https')}var keys = {  cert : fs.readFileSync(__dirname + '/keys/ssl.cert'),  key  : fs.readFileSync(__dirname + '/keys/ssl.key')}var helpers = {};helpers.server = function(opts, cb) {  var defaults = {    code    : 200,    headers : {'Content-Type': 'application/json'}  }  var mirror_response = function(req) {    return JSON.stringify({      headers: req.headers,      body: req.body    })  }  var get = function(what) {    if (!opts[what])      return defaults[what];      if (typeof opts[what] == 'function')      return opts[what](); // set them at runtime    else      return opts[what];  }  var finish = function(req, res) {    if (opts.handler) return opts.handler(req, res);    res.writeHead(get('code'), get('headers'));    res.end(opts.response || mirror_response(req));  }  var handler = function(req, res) {    req.setEncoding('utf8'); // get as string    req.body = '';    req.on('data', function(str) { req.body += str })    req.socket.on('error', function(e) {       // res.writeHead(500, {'Content-Type': 'text/plain'});      // res.end('Error: ' + e.message);    })    setTimeout(function(){      finish(req, res);    }, opts.wait || 0);  };  var protocol = opts.protocol || 'http';  var server;  if (protocol == 'https')    server = protocols[protocol].createServer(keys, handler);  else    server = protocols[protocol].createServer(handler);  server.listen(opts.port, cb);  return server;}module.exports = helpers;
 |