-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
139 lines (124 loc) · 4.05 KB
/
server.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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
// modules
var express = require('express');
var path = require('path');
var log = require('./libs/log')(module);
var config = require('./libs/config');
var TodoModel = require('./libs/mongoose').TodoModel;
// create new Express.js app
var app = express();
// use default favicon
app.use(express.favicon());
// use debug console to dump all requests
app.use(express.logger('dev'));
// JSON parser
app.use(express.bodyParser());
// enable support of PUT and DELETE methods
app.use(express.methodOverride());
// use router
app.use(app.router);
// return static content (public/index.html)
app.use(express.static(path.join(__dirname, "public")));
// Errors handling
app.use(function(req, res, next){
res.status(404);
log.debug('Not found URL: %s', req.url);
res.send({ error: 'Not found' });
return;
});
app.use(function(err, req, res, next){
res.status(err.status || 500);
log.error('Internal server error (%d): %s', res.statusCode, err.message);
res.send({ error: err.message });
return;
});
// API index route
app.get('/api', function(req, res){
res.send('API is running');
});
// RESTful API
app.get('/api/todos', function(req, res) {
return TodoModel.find(function (err, todos) {
if (!err) {
return res.send(todos);
} else {
res.statusCode = 500;
log.error('Internal Server Error (%d): %s', res.statusCode, err.message);
return res.send({ error: 'Server Error' });
}
});
});
app.post('/api/todos', function(req, res) {
var todo = new TodoModel({
name: req.body.name,
status: false
});
todo.save(function (err) {
if (!err) {
log.info("Todo item created");
return res.send({ status: 'OK', todo: todo });
} else {
console.log(err);
res.statusCode = 500;
res.send({ error: 'Server error' });
log.error('Internal Server Error (%d): %s', res.statusCode, err.message);
}
});
});
app.get('/api/todos/:id', function(req, res) {
return TodoModel.findById(req.params.id, function (err, todo) {
if(!todo) {
res.statusCode = 404;
return res.send({ error: 'Not found' });
}
if (!err) {
return res.send({ status: 'OK', todo: todo });
} else {
res.statusCode = 500;
log.error('Internal Server Error (%d): %s', res.statusCode, err.message);
return res.send({ error: 'Server error' });
}
});
});
app.put('/api/todos/:id', function (req, res){
return TodoModel.findById(req.params.id, function (err, todo) {
if(!todo) {
res.statusCode = 404;
return res.send({ error: 'Not found' });
}
todo.name = req.body.name;
todo.status = req.body.status;
todo.priority = req.body.priority;
return todo.save(function (err) {
if (!err) {
log.info("Todo item updated");
return res.send({ status: 'OK', todo: todo });
} else {
res.statusCode = 500;
res.send({ error: 'Server error' });
log.error('Internal Server Error (%d): %s', res.statusCode, err.message);
}
});
});
});
app.delete('/api/todos/:id', function (req, res){
return TodoModel.findById(req.params.id, function (err, todo) {
if(!todo) {
res.statusCode = 404;
return res.send({ error: 'Not found' });
}
return todo.remove(function (err) {
if (!err) {
log.info("Todo item deleted");
return res.send({ status: 'OK' });
} else {
res.statusCode = 500;
log.error('Internal Server Error (%d): %s', res.statusCode, err.message);
return res.send({ error: 'Server error' });
}
});
});
});
// Express.js server listening on port
app.listen(config.get('port'), function(){
log.info('Express server listening on port ' + config.get('port'));
});