/
requestHandlers.js
111 lines (85 loc) · 2.98 KB
/
requestHandlers.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
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
//Load modules
var http = require('http');
var url = require('url');
var util = require('util');
var querystring = require('querystring');
var appURL = 'http://localhost:8888';
//Mongoose config
//(would like to put this in separate file: http://j-query.blogspot.com/2011/11/mongoose-and-mongohq.html)
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var toDoSchema = new Schema({
title : String,
});
mongoose.connect('mongodb://127.0.0.1:27017/data');
mongoose.model('toDo', toDoSchema);
// saves to 'todos' collection in 'data' database rather than todo
var toDo = mongoose.model('toDo');
function add(response, request) {
console.log("Request handler 'add' was called.");
post_handler(request, function(request_data) {
var todo = new toDo({
title : request_data.note
});
todo.save(function(err){
console.log("saving"+ request_data.note);
if(!err){
console.log('todoItem saved.');
}
});
});
response.writeHead(301, {'Location':appURL + '/list', 'Expires': (new Date).toGMTString()});
response.end();
}
function list(response) {
console.log("Request handler 'list' was called.");
toDo.find({}, function(err,todos) {
response.writeHead(200, {'Content-Type': 'text/html'});
response.write('<html><head><html><head><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><title>Todo List</title></head><title>Todo List</title></head>');
response.write('<body>');
response.write('<h1>ToDo list</h1>');
response.write('<ul>');
todos.forEach(function(todo) {
response.write('<li>' + todo.title + ' <a href="remove?id='+todo._id+'">remove</a></li>');
})
var form = '<form action="/add" method="post">'+
'<input type="text" name="note" >'+
'<input type="submit" value="Add note" />'+
'</form>'+
'</body>'+
'</html>';
response.end(form);
});
}
function remove(response, request) {
console.log("Request handler 'remove' was called.");
parsedURL = url.parse(request.url, true);
console.log(' _id to remove ' + parsedURL.query['id']);
toDo.findOne({_id: parsedURL.query['id']},function(err,docs){
console.log('deleting' + docs); //Remove all the documents that match!
docs.remove();
docs.save();
// 301 permanent redirect to list\
response.writeHead(301, {'Location':appURL + '/list', 'Expires': (new Date).toGMTString()});
response.end();
});
}
function post_handler(request, callback){
var _REQUEST = { };
var _CONTENT = '';
if (request.method == 'POST')
{
request.addListener('data', function(chunk)
{
_CONTENT+= chunk;
});
request.addListener('end', function()
{
_REQUEST = querystring.parse(_CONTENT);
callback(_REQUEST);
});
};
};
exports.add = add;
exports.list = list;
exports.remove = remove;