forked from gti525/exercice-intro-api
-
Notifications
You must be signed in to change notification settings - Fork 0
/
api.js
175 lines (143 loc) · 5.34 KB
/
api.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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var path = require('path');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(express.static(__dirname + '/public'));
var port = process.env.PORT || 8080;
var mongoose = require('mongoose');
var uri =
process.env.MONGOLAB_URI ||
'mongodb://test:[email protected]:31872/demomango';
mongoose.connect(uri, function (err, res) {
if (err) {
console.log ('Erreur pour se connecter à: ' + uri + '. ' + err);
} else {
console.log ('Connexion réussie à la BD' + uri);
}
});
var fonctions = require('./scripts/fonctions.js');
var Etudiant = require('./models/etudiant');
// --------------------
// ROUTES D'API
// --------------------
var router = express.Router();
// Routeur qui reçoit tous les messages et les route à l'endroit approprié
router.use(function(req, res, next)
{ next(); // Continue à la route
});
// Route de test, sur /api
router.get('/', function(req, res) {
res.json({ message: 'Bienvenue sur l\'API de GTI525'});
});
// --------------------
// ROUTES D'API
// --------------------
router.route('/etudiants')
//obtenir tous les étudiants
.get(function(req, res) {
var Query = Etudiant.find().sort({'nom':1});
Query.select('-_id');
Query.exec(function (err, etudiants) {
if (err) throw err;
res.send(etudiants);
});
});
/*
Route désactivée pour la version en installation
router.route("/etudiants")
// Ajouter un étudiant
.post(function(req, res) {
var etudiant = new Etudiant();
etudiant.code = req.body.code;
etudiant.nom = req.body.nom;
etudiant.prenom = req.body.prenom;
// sauvegarde l'étudiant à la BD
etudiant.save(function(err) {
if (err){
res.status(500).json({ erreur: 'Erreur lors de l\'enregistrement à la BD' });
return;
}
res.json({ message: 'Étudiant ajouté' });
});
});
*/
router.route("/etudiants/:code") //Prend le code permanent dans l'URL. Ex. /etudiant/BOIE10101010
//Obtenir un seul étudiant
.get(function(req, res) {
Etudiant.find({'code':req.params.code}, function(err, etudiant) {
if (err){
res.send(err);
return;
}
res.json(etudiant);
});
});
router.route("/etudiants/:id")
//Afficher un étudiant et son message
.put(function(req, res) {
Etudiant.findById(req.params.id, function(err, etudiant) {
if (err){
res.status(500).json({ erreur: 'Erreur lors de la lecture dans la BD' });
return;
}
if(req.body.message == null){
res.status(400).json({ erreur: 'Le message doit être fourni dans le corps de la requête' });
return;
}
etudiant.message = req.body.message;
etudiant.save(function(err) {
if (err){
res.status(500).json({ erreur: 'Erreur lors de l\'enregistrement à la BD' });
return;
}
res.json({ message: 'Message ajouté!' });
});
});
});
router.route("/etudiants/:id/soumettreAPI")
//Soumettre l'URL d'un API qui fournira le message
.post(function(req, res) {
Etudiant.findById(req.params.id, function(err, etudiant) {
if (err){
res.status(500).json({ erreur: 'Erreur lors de la lecture dans la BD' });
return;
}
fonctions.getContent(req.body.hyperlien)
.then((html) => {
console.log(html);
try{
//Lecture du contenu de la réponse à l'appel à l'API externe
var jsonMessage = JSON.parse(html);
//Remplacement par la valeur de l'API
etudiant.message = jsonMessage.message;
etudiant.hyperlien = req.body.hyperlien;
}catch (formatException) {
res.status(400).json({ erreur: 'Le message retourné par l\'API fourni n\'est pas formatté correctement' });
return;
}
etudiant.save(function(erreurSauvegarde) {
if (erreurSauvegarde){
res.status(500).json({ erreur: 'Erreur lors de l\'enregistrement à la BD' });
return;
}
res.json({ message: 'Message obtenu de l\'API et a été enregistré!' });
});
})
.catch((err) => {
console.error(err.stack);
res.status(404).json({ erreur: 'L\'URL fourni dans le champ hyperlien est invalide' });
});
});
});
// FIN DES ROUTES
//Enregistre les routes d'API pour qu'elles soient accessibles sur /api
app.use('/api', router);
// Page Angular de présentation des messages
app.get('/', function(req, res) {
res.sendFile(path.join(__dirname, '/public', 'index.html'));
});
// Démarre le serveur
app.listen(port);
console.log('Serveur démarré sur le port ' + port);