mongoose.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. const h = require('../helper');
  2. const async = require('async');
  3. const Mongoose = require('mongoose');
  4. const connection = Mongoose.createConnection('mongodb://tfb-database/hello_world');
  5. // Mongoose Setup
  6. const WorldSchema = new Mongoose.Schema({
  7. id: Number,
  8. randomNumber: Number
  9. }, {
  10. collection: 'world'
  11. });
  12. const FortuneSchema = new Mongoose.Schema({
  13. id: Number,
  14. message: String
  15. }, {
  16. collection: 'fortune'
  17. });
  18. const Worlds = connection.model('World', WorldSchema);
  19. const Fortunes = connection.model('Fortune', FortuneSchema);
  20. const mongooseRandomWorld = (callback) => {
  21. Worlds.findOne({
  22. id: h.randomTfbNumber()
  23. }).exec(callback);
  24. };
  25. const mongooseGetAllFortunes = (callback) => {
  26. Fortunes.find({})
  27. .exec(callback);
  28. };
  29. module.exports = {
  30. SingleQuery: (req, res) => {
  31. mongooseRandomWorld((err, result) => {
  32. if (err) { return process.exit(1); }
  33. h.addTfbHeaders(res, 'json');
  34. res.end(JSON.stringify(result));
  35. })
  36. },
  37. MultipleQueries: (queries, req, res) => {
  38. const queryFunctions = h.fillArray(mongooseRandomWorld, queries);
  39. async.parallel(queryFunctions, (err, results) => {
  40. if (err) { return process.exit(1); }
  41. h.addTfbHeaders(res, 'json');
  42. res.end(JSON.stringify(results));
  43. });
  44. },
  45. Fortunes: (req, res) => {
  46. mongooseGetAllFortunes((err, fortunes) => {
  47. if (err) { return process.exit(1); }
  48. fortunes.push(h.additionalFortune());
  49. fortunes.sort((a, b) => {
  50. return a.message.localeCompare(b.message);
  51. });
  52. h.addTfbHeaders(res, 'html');
  53. res.end(h.fortunesTemplate({
  54. fortunes: fortunes
  55. }))
  56. });
  57. },
  58. Updates: (queries, req, res) => {
  59. const selectFunctions = h.fillArray(mongooseRandomWorld, queries);
  60. async.parallel(selectFunctions, (err, worlds) => {
  61. if (err) { return process.exit(1); }
  62. const updateFunctions = [];
  63. for (let i = 0; i < queries; i++) {
  64. ((i) => {
  65. updateFunctions.push((callback) => {
  66. worlds[i].randomNumber = h.randomTfbNumber();
  67. Worlds.update({
  68. id: worlds[i].id
  69. }, {
  70. randomNumber: worlds[i].randomNumber
  71. }, callback);
  72. });
  73. })(i);
  74. }
  75. async.parallel(updateFunctions, (err, results) => {
  76. if (err) { return process.exit(1); }
  77. h.addTfbHeaders(res, 'json');
  78. // results does not have updated document information
  79. // if no err: all updates were successful
  80. res.end(JSON.stringify(worlds));
  81. });
  82. });
  83. }
  84. };