-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
122 lines (95 loc) · 3.13 KB
/
server.js
File metadata and controls
122 lines (95 loc) · 3.13 KB
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
var express = require('express');
var bodyParser = require('body-parser');
var _ = require('underscore');
var app = express();
var PORT = process.env.PORT || 3000;
var todos = [];
todosNextId = 1;
console.log('hi');
app.use(bodyParser.json());
app.get('/', function (req,res) {
res.send('ToDo APT Root');
});
// GET /todos?completed=true&q=house
// (?foo=true) <-- query param ==foo
app.get('/todos', function (req, res) {
var queryParms = req.query; //<-- creates query param (?param)
var filteredTodos = todos; // <-- array
//Searches through query paramaters and return obj with requested comlpeted value
if (queryParms.hasOwnProperty('completed') && queryParms.completed
=== 'true') {
filteredTodos = _.where(filteredTodos, {completed:true});
} else if (queryParms.hasOwnProperty('completed') && queryParms.completed
=== 'false') {
filteredTodos = _.where(filteredTodos, {completed:false});
}
//Searches through query paramaters and return obj with requested completed value
if (queryParms.hasOwnProperty('q') && queryParms.q.length > 0)
{
filteredTodos = _.filter(filteredTodos, function (todo) {
return todo.description.toLowerCase().indexOf(queryParms.q.toLowerCase()) > -1;
});
}
res.json(filteredTodos);
});
app.get('/todos/:id', function (req, res) {
todoID = parseInt(req.params.id, 10);
var matchedToDo = _.findWhere(todos, {id: todoID});
if (matchedToDo) {
res.json(matchedToDo);
} else {
res.status(404).send();
}
});
// POST /todos/
app.post('/todos', function (req,res) {
//data sanitization
var body = _.pick(req.body,'description', 'completed');
body.description = body.description.trim();
//data validation
if (!_.isBoolean(body.completed) || !_.isString(body.description) ||
body.description.length === 0) {
return res.status(400).send();
}
body.id = todosNextId;
todos.push(body);
res.json(body);
todosNextId += 1;
});
// DELETE /todos/:id
app.delete('/todos/:id', function (req,res) {
var todoID = parseInt(req.params.id, 10); // req.params stores url paramaters
var matchedToDo = _.findWhere(todos, {id: todoID});
if (!matchedToDo) {
res.status(404).send("no todo found");
} else {
todos = _.without(todos, matchedToDo);
res.json(matchedToDo);
}
});
//PUT /todos/:id
app.put('/todos/:id', function (req,res) {
var todoID = parseInt(req.params.id, 10);
var matchedToDo = _.findWhere(todos, {id: todoID});
var body = _.pick(req.body,'description', 'completed');
var validAttributes = {};
if (!matchedToDo) {
return res.status(404).send();
}
if (body.hasOwnProperty('completed') && _.isBoolean(body.completed)) {
validAttributes.completed = body.completed;
} else if (body.hasOwnProperty('completed')) {
return res.status(400).send();
}
if (body.hasOwnProperty('description') && _.isString(body.description) &&
body.description.trim().length > 0) {
validAttributes.description = body.description;
} else if (body.hasOwnProperty('description')) {
return res.status(400).send();
}
_.extend(matchedToDo,validAttributes);
res.json(matchedToDo);
});
app.listen(PORT, function () {
console.log('Express listening on port ' + PORT);
});