Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.07 KB | None | 0 0
  1. const express = require('express');
  2. const helmet = require('helmet');
  3. const mongoose = require('mongoose');
  4. const Player = require('./models/player');
  5. const app = express();
  6. const mongoDB = 'playerDB';
  7. const ALL_PLAYERS_HREF = "http://localhost:3000/api/players/"
  8. var api = express.Router();
  9.  
  10. mongoose.connect('mongodb://localhost/WWWProgramming', { useNewUrlParser: true });
  11. const db = mongoose.connection
  12. db.on('error', console.error.bind(console, 'MongoDB connection error:'));
  13. db.once('open', () => console.log('connected to database'));
  14.  
  15. app.use(helmet());
  16. app.use(express.json());
  17.  
  18. //The API style I use is based on what the teacher used and https://docs.microsoft.com/en-us/azure/architecture/best-practices/api-design
  19.  
  20. //Here's some example data. Further tips on how to use the API, consult the info.txt file.
  21. players = {
  22. "_links": {
  23. "self": { "href": ALL_PLAYERS_HREF }
  24. },
  25. "_embedded": {
  26. "users": [{
  27. "_links": {
  28. "self": {
  29. "href": "http://localhost:3000/api/players/0"
  30. }
  31. },
  32. "name": "Selanne",
  33. "active": false
  34. },
  35. {
  36. "_links": {
  37. "self": {
  38. "href": "http://localhost:3000/api/players/1"
  39. }
  40. },
  41. "name": "Granlund",
  42. "active": true
  43. }
  44. ]
  45. }
  46. }
  47.  
  48. function err(statusCode, response, message) {
  49. response.statusCode = statusCode;
  50. response.statusMessage = message;
  51. response.end();
  52. }
  53.  
  54. api.get('/players/:id', function (req, res) {
  55. var player = JSON.parse(JSON.stringify(players._embedded.users.find(item => item.id == req.params.id)));
  56. player._links =
  57. {
  58. "self": {
  59. "href": ALL_PLAYERS_HREF + player.id
  60. },
  61. "players": {
  62. "href": ALL_PLAYERS_HREF
  63. }
  64. };
  65. res.json(player);
  66. })
  67.  
  68. api.get('/players', function (req, res) {
  69. var playerList = {
  70. "_links": {
  71. "self": {
  72. "href": ALL_PLAYERS_HREF
  73. }
  74. }
  75. };
  76. users = [];
  77. players._embedded.users.forEach((item) => {
  78. var player = JSON.parse(JSON.stringify(item))
  79. player._links = {
  80. "self": {
  81. "href": ALL_PLAYERS_HREF + player.id
  82. }
  83. };
  84. users.push(player);
  85. });
  86. if (users) {
  87. playerList._embedded = {
  88. "users": users
  89. };
  90. }
  91. console.log(playerList);
  92. res.json(playerList);
  93. });
  94.  
  95. const addLink = (player, rootLink) => {
  96. let link = player.link;
  97. player = player.toObject();
  98.  
  99. player.links = {
  100. self: {
  101. href: link
  102. }
  103. };
  104.  
  105. if (rootLink) {
  106. player.links.players = {
  107. href: ALL_PLAYERS_HREF
  108. };
  109. }
  110. return player;
  111. }
  112.  
  113. api.post('/players', async (req, res) => {
  114. const player = new Player({
  115. name: req.body.name,
  116. active: req.body.active
  117. });
  118.  
  119. await player.save(function (err, player) {
  120. if (err) return res.end("error while saving player", err);
  121. console.log(player + player.name + " saved to players collection.");
  122. });
  123.  
  124. player = addLink(player, true);
  125. res.json(player)
  126. });
  127.  
  128. api.delete('/players/:id', getPlayer, async (req, res) => {
  129. try {
  130. await res.player.remove()
  131. res.json({ message: 'Deleted a player' })
  132. } catch (err) {
  133. res.status(500).json({ message: err.message })
  134. }
  135. })
  136.  
  137. api.delete('/players', function (req, res) {
  138.  
  139. })
  140.  
  141. api.put('/players/:id', function (req, res) {
  142.  
  143. })
  144.  
  145. async function getPlayer(req, res, next) {
  146. try {
  147. player = await Player.findById(req.params.id)
  148. if (player == null) {
  149. return res.status(404).json({ message: 'Cant find player' })
  150. }
  151. } catch (err) {
  152. return res.status(500).json({ message: err.message })
  153. }
  154. res.player = player
  155. next()
  156. }
  157.  
  158. app.use('/api', api);
  159. app.listen(3000, () => console.log('app listening at port 3000!'))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement