-
Notifications
You must be signed in to change notification settings - Fork 10
/
shoppingListRouter.js
81 lines (71 loc) · 2.63 KB
/
shoppingListRouter.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser');
const jsonParser = bodyParser.json();
const {ShoppingList} = require('./models');
// we're going to add some items to ShoppingList
// so there's some data to look at
ShoppingList.create('beans', 2);
ShoppingList.create('tomatoes', 3);
ShoppingList.create('peppers', 4);
// when the root of this router is called with GET, return
// all current ShoppingList items
router.get('/', (req, res) => {
res.json(ShoppingList.get());
});
// when a new shopping list item is posted, make sure it's
// got required fields ('name' and 'checked'). if not,
// log an error and return a 400 status code. if okay,
// add new item to ShoppingList and return it with a 201.
router.post('/', jsonParser, (req, res) => {
// ensure `name` and `budget` are in request body
const requiredFields = ['name', 'checked'];
for (let i=0; i<requiredFields.length; i++) {
const field = requiredFields[i];
if (!(field in req.body)) {
const message = `Missing \`${field}\` in request body`
console.error(message);
return res.status(400).send(message);
}
}
const item = ShoppingList.create(req.body.name, req.body.checked);
res.status(201).json(item);
});
// when DELETE request comes in with an id in path,
// try to delete that item from ShoppingList.
router.delete('/:id', (req, res) => {
ShoppingList.delete(req.params.id);
console.log(`Deleted shopping list item \`${req.params.ID}\``);
res.status(204).end();
});
// when PUT request comes in with updated item, ensure has
// required fields. also ensure that item id in url path, and
// item id in updated item object match. if problems with any
// of that, log error and send back status code 400. otherwise
// call `ShoppingList.update` with updated item.
router.put('/:id', jsonParser, (req, res) => {
const requiredFields = ['name', 'budget', 'id'];
for (let i=0; i<requiredFields.length; i++) {
const field = requiredFields[i];
if (!(field in req.body)) {
const message = `Missing \`${field}\` in request body`
console.error(message);
return res.status(400).send(message);
}
}
if (req.params.id !== req.body.id) {
const message = (
`Request path id (${req.params.id}) and request body id `
`(${req.body.id}) must match`);
console.error(message);
return res.status(400).send(message);
}
console.log(`Updating shopping list item \`${req.params.id}\``);
const updatedItem = ShoppingList.update({
id: req.params.id,
name: req.body.name,
budget: req.body.budget
});
res.status(204).end();
})
module.exports = router;