app.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. var cluster = require('cluster')
  2. , numCPUs = require('os').cpus().length
  3. , koa = require('koa')
  4. , route = require('koa-route')
  5. , bodyParser = require('koa-bodyparser')
  6. , override = require('koa-override')
  7. , mongo = require('koa-mongo');
  8. if (cluster.isMaster) {
  9. // Fork workers.
  10. for (var i = 0; i < numCPUs; i++) {
  11. cluster.fork();
  12. }
  13. cluster.on('exit', function(worker, code, signal) {
  14. console.log('worker ' + worker.process.pid + ' died');
  15. });
  16. } else {
  17. var app = module.exports = koa();
  18. app.use(bodyParser());
  19. app.use(override());
  20. app.use(mongo({
  21. uri: "mongodb://localhost/hello_world"
  22. }));
  23. // routes
  24. app.use(route.get('/json', jsonHandler));
  25. app.use(route.get('/db', dbHandler));
  26. app.use(route.get('/queries', queriesHandler));
  27. // app.use(route.get('/fortune', fortuneHandler));
  28. // app.use(route.get('/update', updateHandler));
  29. app.use(route.get('/plaintext', textHandler));
  30. function *worldQuery() {
  31. return yield function(callback) {
  32. var randomId = {id: Math.floor(Math.random()*10000) + 1};
  33. this.mongo.collection('world').findOne(randomId, {_id: 0}, callback);
  34. }
  35. }
  36. function *jsonHandler() {
  37. this.response.body = {
  38. message: "Hello, world!"
  39. }
  40. }
  41. function *dbHandler() {
  42. this.body = yield worldQuery;
  43. }
  44. function *queriesHandler() {
  45. var numOfQueries = this.query.queries || 1,
  46. queries = [];
  47. for (var i = 0; i < numOfQueries; i++) {
  48. queries.push(worldQuery);
  49. }
  50. this.body = yield queries;
  51. }
  52. function *textHandler() {
  53. this.body = 'Hello, world!'
  54. }
  55. app.listen(3000); //used for local testing
  56. }