Skip to content

Instantly share code, notes, and snippets.

@dietergoetelen
Created November 20, 2021 11:02
Show Gist options
  • Save dietergoetelen/a930ef37d68ee4d5b8435f91dd55d234 to your computer and use it in GitHub Desktop.
Save dietergoetelen/a930ef37d68ee4d5b8435f91dd55d234 to your computer and use it in GitHub Desktop.
starwars
[{
"name": "Luke Skywalker",
"height": "172",
"gender": "male"
}, {
"name": "C-3PO",
"height": "167",
"gender": "n/a"
}, {
"name": "R2-D2",
"height": "96",
"gender": "n/a"
}, {
"name": "Darth Vader",
"height": "202",
"gender": "male"
}, {
"name": "Leia Organa",
"height": "150",
"gender": "female"
}, {
"name": "Owen Lars",
"height": "178",
"gender": "male"
}, {
"name": "Beru Whitesun lars",
"height": "165",
"gender": "female"
}, {
"name": "R5-D4",
"height": "97",
"gender": "n/a"
}, {
"name": "Biggs Darklighter",
"height": "183",
"gender": "male"
}, {
"name": "Obi-Wan Kenobi",
"height": "182",
"gender": "male"
}]
@dietergoetelen
Copy link
Author

dietergoetelen commented Nov 20, 2021

# return the whole list
GET /api/people 

# return one single starwars character if it's found
# return 404 if it's not found
GET /api/people/:id

Extra

POST /api/people
{
  "name": "...",
  "height": "...",
  "gender": "..."
}

# Should create a new record in the list if the name does not exist. 
# If the name exists it should throw an error -> status code 409 conlifct

@dietergoetelen
Copy link
Author

const express = require('express');
const app = express();
const router = express.Router();

app.use(express.json());
app.use(router);


const people = [{
  "name": "Luke Skywalker",
  "height": "172",
  "gender": "male"
}, {
  "name": "C-3PO",
  "height": "167",
  "gender": "n/a"
}, {
  "name": "R2-D2",
  "height": "96",
  "gender": "n/a"
}, {
  "name": "Darth Vader",
  "height": "202",
  "gender": "male"
}, {
  "name": "Leia Organa",
  "height": "150",
  "gender": "female"
}, {
  "name": "Owen Lars",
  "height": "178",
  "gender": "male"
}, {
  "name": "Beru Whitesun lars",
  "height": "165",
  "gender": "female"
}, {
  "name": "R5-D4",
  "height": "97",
  "gender": "n/a"
}, {
  "name": "Biggs Darklighter",
  "height": "183",
  "gender": "male"
}, {
  "name": "Obi-Wan Kenobi",
  "height": "182",
  "gender": "male"
}]

function index(req, res) {
  res.json(people)
}

function byId(req, res) {
  const id = Number(req.params.id);
  
  if (isNaN(id)) {
    res.status(401);
    return res.end();
  }

  const person = people[id]
  
  if (person === undefined) {
    res.status(404);
    return res.end();
  }

  res.json(person);
}

function create(req, res) {
  const person = req.body;
  
  if (person.name === undefined) {
    res.status(400);
    return res.end();
  }
  
  if (person.height === undefined) {
    res.status(400);
    return res.end();
  }
  
  if (person.gender === undefined) {
    res.status(400);
    return res.end();
  }
  
  if (people.find(p => p.name === person.name)) {
    res.status(409);
    return res.end();
  }
  
  people.push(person);
  
  res.status(201);
  res.json(person)
}

router.get('/api/people', index);
router.post('/api/people', create)
router.get('/api/people/:id', byId);

app.listen(3000, () => {
  console.log('server listening on port 3000')
})

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment