create-server.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // Forked workers will run this code when found to not be
  2. // the master of the cluster.
  3. var http = require('http');
  4. var parseurl = require('parseurl'); // faster than native nodejs url package
  5. var h = require('./helper');
  6. // Handlers, one for each db config
  7. var MongodbRawHandler = require('./handlers/mongodb-raw');
  8. var MySQLRawHandler = require('./handlers/mysql-raw');
  9. // Mongoose is a popular Node/MongoDB driver
  10. var MongooseHandler = require('./handlers/mongoose');
  11. // Sequelize is a popular Node/SQL driver
  12. var SequelizeHandler = require('./handlers/sequelize');
  13. // Node's redis package uses the C bindings of the hiredis library
  14. var HiredisHandler = require('./handlers/redis');
  15. module.exports = http.createServer(function (req, res) {
  16. var url = parseurl(req)
  17. var route = url.pathname;
  18. var basicHandlers = {
  19. '/json': h.responses.jsonSerialization,
  20. '/plaintext': h.responses.plaintext,
  21. '/mongoose/db': MongooseHandler.SingleQuery,
  22. '/mongoose/fortunes': MongooseHandler.Fortunes,
  23. '/mongodb/db': MongodbRawHandler.SingleQuery,
  24. '/mongodb/fortunes': MongodbRawHandler.Fortunes,
  25. '/sequelize/db': SequelizeHandler.SingleQuery,
  26. '/sequelize/fortunes': SequelizeHandler.Fortunes,
  27. '/mysql/db': MySQLRawHandler.SingleQuery,
  28. '/mysql/fortunes': MySQLRawHandler.Fortunes,
  29. '/hiredis/db': HiredisHandler.SingleQuery,
  30. '/hiredis/fortunes': HiredisHandler.Fortunes
  31. }
  32. if (basicHandlers[route]) {
  33. return basicHandlers[route](req, res);
  34. } else {
  35. // naive: only works if there is one query param, as is the case in TFB
  36. var queries = url.query.split('=')[1]
  37. queries = ~~(queries) || 1;
  38. queries = Math.min(Math.max(queries, 1), 500);
  39. var queriesHandlers = {
  40. '/mongoose/queries': MongooseHandler.MultipleQueries,
  41. '/mongoose/updates': MongooseHandler.Updates,
  42. '/mongodb/queries': MongodbRawHandler.MultipleQueries,
  43. '/mongodb/updates': MongodbRawHandler.Updates,
  44. '/sequelize/queries': SequelizeHandler.MultipleQueries,
  45. '/sequelize/updates': SequelizeHandler.Updates,
  46. '/mysql/queries': MySQLRawHandler.MultipleQueries,
  47. '/mysql/updates': MySQLRawHandler.Updates,
  48. '/hiredis/queries': HiredisHandler.MultipleQueries,
  49. '/hiredis/updates': HiredisHandler.Updates
  50. }
  51. if (queriesHandlers[route]) {
  52. return queriesHandlers[route](queries, req, res);
  53. } else {
  54. return h.responses.routeNotImplemented(req, res);
  55. }
  56. }
  57. }).listen(8080, function() {
  58. console.log("NodeJS worker listening on port 8080");
  59. });