sequelize.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. // Connects to MySQL using the sequelize driver
  2. // Handles related routes
  3. var h = require('../helper');
  4. var Promise = require('bluebird');
  5. var Sequelize = require('sequelize');
  6. var sequelize = new Sequelize('hello_world', 'benchmarkdbuser', 'benchmarkdbpass', {
  7. host: '127.0.0.1',
  8. dialect: 'mysql',
  9. logging: false
  10. });
  11. var Worlds = sequelize.define('World', {
  12. id: { type: 'Sequelize.INTEGER' },
  13. randomNumber: { type: 'Sequelize.INTEGER' }
  14. }, {
  15. timestamps: false,
  16. freezeTableName: true
  17. });
  18. var Fortunes = sequelize.define('Fortune', {
  19. id: { type: 'Sequelize.INTEGER' },
  20. message: { type: 'Sequelize.STRING' }
  21. }, {
  22. timestamps: false,
  23. freezeTableName: true
  24. });
  25. var randomWorldPromise = function() {
  26. return Worlds.findOne({
  27. where: { id: h.randomTfbNumber() }
  28. }).then(function (results) {
  29. return results;
  30. }).catch(function (err) {
  31. process.exit(1);
  32. });
  33. }
  34. module.exports = {
  35. SingleQuery: function (req, reply) {
  36. randomWorldPromise().then(function (world) {
  37. reply(world)
  38. .header('Server', 'hapi');
  39. })
  40. },
  41. MultipleQueries: function (req, reply) {
  42. var queries = h.getQueries(req);
  43. var worldPromises = [];
  44. for (var i = 0; i < queries; i++) {
  45. worldPromises.push(randomWorldPromise());
  46. }
  47. Promise.all(worldPromises).then(function (worlds) {
  48. reply(worlds)
  49. .header('Server', 'hapi');
  50. });
  51. },
  52. Fortunes: function (req, reply) {
  53. Fortunes.findAll().then(function (fortunes) {
  54. fortunes.push(h.ADDITIONAL_FORTUNE);
  55. fortunes.sort(function (a, b) {
  56. return a.message.localeCompare(b.message);
  57. });
  58. reply.view('fortunes', {
  59. fortunes: fortunes
  60. })
  61. .header('Content-Type', 'text/html')
  62. .header('Server', 'hapi');
  63. }).catch(function (err) {
  64. process.exit(1);
  65. });
  66. },
  67. Updates: function (req, reply) {
  68. var queries = h.getQueries(req);
  69. var worldPromises = [];
  70. for (var i = 0; i < queries; i++) {
  71. worldPromises.push(randomWorldPromise());
  72. }
  73. var worldUpdate = function (world) {
  74. world.randomNumber = h.randomTfbNumber();
  75. return Worlds.update(
  76. { randomNumber: world.randomNumber },
  77. { where: { id: world.id } }
  78. )
  79. .then(function (results) {
  80. return world;
  81. })
  82. .catch(function (err) {
  83. process.exit(1);
  84. });
  85. }
  86. Promise
  87. .all(worldPromises)
  88. .map(function (world) {
  89. return worldUpdate(world);
  90. })
  91. .then(function (updated) {
  92. reply(updated)
  93. .header('Server', 'hapi')
  94. })
  95. .catch(function (e) {
  96. process.exit(1);
  97. });
  98. }
  99. }