mongoose.js 2.6 KB

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