-
Notifications
You must be signed in to change notification settings - Fork 1
/
app.js
139 lines (110 loc) · 4.29 KB
/
app.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
var express = require('express');
var app = express();
var path = require('path');
var formidable = require('formidable');
var fs = require('fs');
app.use(express.static(path.join(__dirname, 'public')));
/* ================================================================================================================
*
* Aquesta secció correspon a l'encaminament i accepta les següents rutes:
* / (GET) - serveix l'index.html
* /autoload (GET) - retorna la informació del contingut de memòria en format JSON
* /upload (POST) - puja el fitxer per processar i, si és correcte, retorna el resum en format JSON
*
* ================================================================================================================ */
app.get('/', function (req, res) {
res.sendFile(path.join(__dirname, 'views/index.html'));
});
app.get('/autoload', function (req, res) {
var responseData;
if (loadedData) {
console.log("Enviant resum: ",loadedData.filename);
// S'ha trobat informació a la memòria
responseData = {
status: "success",
summary: {
origin: loadedData.origin,
description: loadedData.description ? loadedData.description : 'No s\'ha trobat cap descripció',
altruists: loadedData.altruists,
filename: loadedData.filename
},
data: loadedData
};
} else {
// No s'ha pujat cap fitxer encara
responseData = {
status: "error",
message: "No s'ha pujat cap fitxer anteriorment"
};
}
res.type('json');
res.end(JSON.stringify(responseData));
});
app.post('/upload', function (req, res) {
var form = new formidable.IncomingForm();
// specify that we want to allow the user to upload multiple files in a single request
form.multiples = true;
// store all uploads in the /uploads directory
form.uploadDir = path.join(__dirname, '/uploads');
// every time a file has been uploaded successfully,
// rename it to it's orignal name
form.on('file', function (field, file) {
var filepath = path.join(form.uploadDir, file.name);
fs.rename(file.path, filepath, function () {
var responseData;
if (parseDataFile(filepath)) {
responseData = {
status: "success",
summary: {
origin: loadedData.origin,
description: loadedData.description ? loadedData.description : 'No s\'ha trobat cap descripció',
altruists: loadedData.altruists,
filename: loadedData.filename
},
data: loadedData
};
} else {
// S'ha produït un error
responseData = {
status: "error",
message: "No s'ha pogut processar el fitxer correctament"
};
}
res.type('json');
res.end(JSON.stringify(responseData));
});
});
form.on('error', function (err) {
console.log('Error:: \n' + err);
});
form.parse(req);
});
var loadedData = null; // Dades carregades a la memòria
/**
* Analitza el fitxer localitzat a la ruta especificada carregant les dades a memòria i seguidament l'esborra.
*
* @param ruta - ruta del fitxer que es vol analitzar
* @returns {boolean} - cert si s'ha parsejat amb èxit
*/
function parseDataFile(ruta) {
var esCorrecte = false;
try {
loadedData = JSON.parse(fs.readFileSync(ruta, 'utf8'));
loadedData.filename = path.basename(ruta);
esCorrecte = true;
} catch (e) {
console.error(e);
}
fs.unlink(ruta, function () {/* buida per evitar el warning */
});
return esCorrecte;
}
/* ================================================================================================================
*
* Aquesta secció inicia l'aplicació com a servidor HTTP.
*
* ================================================================================================================ */
var port = 80;
var server = app.listen(port, function () {
console.log('Servidor escoltant al port ' + port);
});