Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const express = require('express');
- const helmet = require('helmet');
- const mongoose = require('mongoose');
- const Player = require('./models/player');
- const app = express();
- const mongoDB = 'playerDB';
- const ALL_PLAYERS_HREF = "http://localhost:3000/api/players/"
- var api = express.Router();
- mongoose.connect('mongodb://localhost/WWWProgramming', { useNewUrlParser: true });
- const db = mongoose.connection
- db.on('error', console.error.bind(console, 'MongoDB connection error:'));
- db.once('open', () => console.log('connected to database'));
- app.use(helmet());
- app.use(express.json());
- //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
- //Here's some example data. Further tips on how to use the API, consult the info.txt file.
- players = {
- "_links": {
- "self": { "href": ALL_PLAYERS_HREF }
- },
- "_embedded": {
- "users": [{
- "_links": {
- "self": {
- "href": "http://localhost:3000/api/players/0"
- }
- },
- "name": "Selanne",
- "active": false
- },
- {
- "_links": {
- "self": {
- "href": "http://localhost:3000/api/players/1"
- }
- },
- "name": "Granlund",
- "active": true
- }
- ]
- }
- }
- function err(statusCode, response, message) {
- response.statusCode = statusCode;
- response.statusMessage = message;
- response.end();
- }
- api.get('/players/:id', function (req, res) {
- var player = JSON.parse(JSON.stringify(players._embedded.users.find(item => item.id == req.params.id)));
- player._links =
- {
- "self": {
- "href": ALL_PLAYERS_HREF + player.id
- },
- "players": {
- "href": ALL_PLAYERS_HREF
- }
- };
- res.json(player);
- })
- api.get('/players', function (req, res) {
- var playerList = {
- "_links": {
- "self": {
- "href": ALL_PLAYERS_HREF
- }
- }
- };
- users = [];
- players._embedded.users.forEach((item) => {
- var player = JSON.parse(JSON.stringify(item))
- player._links = {
- "self": {
- "href": ALL_PLAYERS_HREF + player.id
- }
- };
- users.push(player);
- });
- if (users) {
- playerList._embedded = {
- "users": users
- };
- }
- console.log(playerList);
- res.json(playerList);
- });
- const addLink = (player, rootLink) => {
- let link = player.link;
- player = player.toObject();
- player.links = {
- self: {
- href: link
- }
- };
- if (rootLink) {
- player.links.players = {
- href: ALL_PLAYERS_HREF
- };
- }
- return player;
- }
- api.post('/players', async (req, res) => {
- const player = new Player({
- name: req.body.name,
- active: req.body.active
- });
- await player.save(function (err, player) {
- if (err) return res.end("error while saving player", err);
- console.log(player + player.name + " saved to players collection.");
- });
- player = addLink(player, true);
- res.json(player)
- });
- api.delete('/players/:id', getPlayer, async (req, res) => {
- try {
- await res.player.remove()
- res.json({ message: 'Deleted a player' })
- } catch (err) {
- res.status(500).json({ message: err.message })
- }
- })
- api.delete('/players', function (req, res) {
- })
- api.put('/players/:id', function (req, res) {
- })
- async function getPlayer(req, res, next) {
- try {
- player = await Player.findById(req.params.id)
- if (player == null) {
- return res.status(404).json({ message: 'Cant find player' })
- }
- } catch (err) {
- return res.status(500).json({ message: err.message })
- }
- res.player = player
- next()
- }
- app.use('/api', api);
- app.listen(3000, () => console.log('app listening at port 3000!'))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement