server.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. const
  2. express = require('express'),
  3. Sequelize = require('sequelize'),
  4. bodyParser = require('body-parser');
  5. const app = express();
  6. app.use(bodyParser.json());
  7. // create Sequelize instance
  8. const sequelize = new Sequelize('w4a', 'w4a', 'w4aw4aw4a', {
  9. host: 'localhost',
  10. port: 3306,
  11. dialect: 'mysql',
  12. dialectOptions: { decimalNumbers: true }
  13. // logging: false
  14. });
  15. // create models
  16. class Person extends Sequelize.Model { }
  17. Person.init({
  18. lastname: Sequelize.STRING,
  19. firstname: Sequelize.STRING
  20. }, {
  21. sequelize,
  22. modelName: 'Person'
  23. });
  24. // sync DB
  25. sequelize.sync();
  26. // create controllers
  27. const personCtrl = {
  28. get_all: (req, res, next) => {
  29. return Person.findAll({
  30. order: ['lastname'] // sort results by lastname
  31. })
  32. .then((people) => res.json(people))
  33. .catch((err) => next(err));
  34. },
  35. get_by_id: (req, res, next) => {
  36. return Person.findByPk(req.params.person_id)
  37. .then((person) => {
  38. if (!person) {
  39. throw { status: 404, message: 'Requested Person not found' };
  40. }
  41. return res.json(person);
  42. })
  43. .catch((err) => next(err));
  44. },
  45. create: (req, res, next) => {
  46. const data = {
  47. firstname: req.body.firstname || '', // use empty string if not defined
  48. lastname: req.body.lastname || '' // use empty string if not defined
  49. };
  50. return Person.create(data)
  51. .then((person) => res.json(person))
  52. .catch((err) => next(err));
  53. },
  54. update_by_id: (req, res, next) => {
  55. return Person.findByPk(req.params.person_id)
  56. .then((person) => {
  57. if (!person) {
  58. throw { status: 404, message: 'Requested Person not found' };
  59. }
  60. Object.assign(person, req.body);
  61. return person.save();
  62. })
  63. .then((person) => res.json(person))
  64. .catch((err) => next(err));
  65. },
  66. delete_by_id: (req, res, next) => {
  67. return Person.findByPk(req.params.person_id)
  68. .then((person) => {
  69. if (!person) {
  70. throw { status: 404, message: 'Requested Person not found' };
  71. }
  72. return person.destroy();
  73. })
  74. .then(() => res.status(200).end())
  75. .catch((err) => next(err));
  76. }
  77. };
  78. // register routes
  79. app.get('/person', personCtrl.get_all);
  80. app.post('/person', personCtrl.create);
  81. app.get('/person/:person_id', personCtrl.get_by_id);
  82. app.put('/person/:person_id', personCtrl.update_by_id);
  83. app.delete('/person/:person_id', personCtrl.delete_by_id);
  84. // register error handling middleware
  85. app.use((err, req, res, next) => {
  86. if (err.status === undefined) {
  87. return res.status(500).send(err.message);
  88. } else {
  89. return res.status(err.status).send(err.message);
  90. }
  91. });
  92. // launch server
  93. const server = app.listen(3000, () => {
  94. const host = server.address().address;
  95. const port = server.address().port;
  96. console.log('App listening at http://%s:%s', host, port);
  97. });