-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
145 lines (123 loc) · 3.83 KB
/
index.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
140
141
142
143
144
145
'use strict';
const express = require("express");
const fs = require('fs');
const app = express();
app.use(require('body-parser').json());
var todos = getTodosArray();
setTimeout(() => {console.log(todos)}, 1000);
app.get('/', (request, response, next) => {
response.status(303);
response.redirect('help');
});
app.get('/help', (request, response, next) => {
var fileStream = fs.createReadStream('help.json');
fileStream.on('open', function () {
response.status(200);
fileStream.pipe(response);
});
});
app.get('/todos', (request, response, next) => {
response.status(200).json(todos);
});
app.post('/todos', (request, response, next) => {// add todo item
var item = request.body.item;
if (!item || (item = item.toString().trim()).length === 0){
return response.status(400).end();
}
todos.push(item);
var status = submitTodos(todos);
if (status) {
console.log(status);
response.status(405).end();// this will never be called unless the server is refusing to write files
} else {
console.log('Item added successfully!', item);
response.status(201).json({"status": "Item added successfully!"});
}
});
app.delete('/todos/:index', (request, response, next) => {
if (todos.length === 0){
response.status(410).end();
return console.log('Todos list is empty!');
}
var index = Number(request.params.index);
if (!index || index <= 0 || index > todos.length ){
response.status(400);
response.json({"status": 'Invalid index number: a valid index number is from 1 to ' + todos.length});
return console.log('Invalid index number: a valid index number is from 1 to ' + todos.length);
}
var item_removed = todos.splice(index - 1, 1);
var status = submitTodos(todos);
if (status) {
console.log(status);
response.status(405);
} else {
console.log('Item removed successfully!', item_removed);
response.status(200).json({"status": "Item removed successfully!"});
}
response.end();
});
app.put('/todos/:index', (request, response, next) => {
if (todos.length === 0){
response.status(410).end();
return console.log('Todos list is empty!');
}
var index = Number(request.params.index);
var item = request.body.item;
if (!index || index <= 0 || index > todos.length) {
response.status(400).json({"status": "Invalid index number!"});
return console.log('Invalid index number: a valid index number is from 1 to ' + todos.length);
}
if (!item || (item = item.toString().trim()).length === 0){
response.status(400).json({"status": "Invalid item-name input!"});
return console.log("Invalid item-name input");
}
var item_removed = todos.splice(index - 1, 1, item);
var status =submitTodos(todos);
if (status) {
console.log(status);
response.status(405);
} else {
console.log('Item updated successfully!', `\n\nOld-item: "${item_removed}" replaced with New-item: "${item}"`);
response.status(200).json({"status": "Item updated successfully!"});
}
response.end();
});
app.delete('/reset/todos', (request, response, next) => {
todos = [];
var status =submitTodos(todos);
if (status) {
console.log(status);
response.status(405);
} else {
response.status(205);
console.log('Todo\'s reseted successfully!');
}
response.end();
});
app.listen(8080, () => {
console.log('application is listening on port 8080');
});
function getTodosArray (){
fs.readFile('todo.json', "utf-8", function(error, data) {
if (error) {
todos = [];
} else {
todos = convertTodosToJSON(data);
}
return todos;
});
}
function convertTodosToJSON(data){
var todos;
try{
todos = JSON.parse(data);
} catch(error){
todos = [];
}
return todos;
}
function submitTodos(todos){// modifying todo.json
fs.writeFile('todo.json', JSON.stringify(todos), "utf-8", function(error) {
return error;
});
}