Je suis le cours NodeJs du site openclassroom et dans le TP, on doit faire une todoliste accessible en lecture écriture par plusieurs utilisateurs. Tous les utilisateurs se connectent et lorsque l'un d'entre eux ajoute une tâche à la todoliste, tous les autres utilisateurs voient la nouvelle tâche et ce sans recharger la page. En gros, c'est comme un chat mais c'est une liste de choses à faire qui s'affiche. Bref, quand je fais l'exe, tout va bien, la liste se met bien à jour mais je dois actualiser la page de chaque utilisateur pour qu'il voie la nouvelle tâche et ce n'est pas sensé se passer comme ça, normalement, la liste s'actualise toute seule, sans l'intervention des utilisateurs. Quelqu'un a une idée de la façon dont je devrais m'y prendre pour réajuster ça ?
Je comprends bien que je dois lancer un broadcast de la nouvelle tâche au moment où on ajoute une nouvelle tâche mais je vois pas comment techniquement je peux mettre un eventListener lors de l'ajout qui se fait via le formulaire, si vous avez des pistes, je suis preneur
je vous mets le code sur lequel je travaille :
app.js
var http = require('http');
var express = require('express');
var session = require('cookie-session'); // Charge le middleware de sessions
var bodyParser = require('body-parser'); // Charge le middleware de gestion des paramètres
var urlencodedParser = bodyParser.urlencoded({ extended: false });
var app = express();
var server = http.createServer(app);
/* On utilise les sessions */
app.use(session({secret: 'todotopsecret'}))
/* S'il n'y a pas de todolist dans la session,
on en crée une vide sous forme d'array avant la suite */
.use(function(req, res, next){
if (typeof(req.session.todolist) == 'undefined') {
req.session.todolist = [];
}
next();
})
/* On affiche la todolist et le formulaire */
.get('/todo', function(req, res) {
res.render('todo.ejs', {todolist: req.session.todolist});
})
/* On ajoute un élément à la todolist */
.post('/todo/ajouter/', urlencodedParser, function(req, res) {
if (req.body.newtodo != '') {
req.session.todolist.push(req.body.newtodo);
}
res.redirect('/todo');
})
/* Supprime un élément de la todolist */
.get('/todo/supprimer/:id', function(req, res) {
if (req.params.id != '') {
req.session.todolist.splice(req.params.id, 1);
}
res.redirect('/todo');
})
/* On redirige vers la todolist si la page demandée n'est pas trouvée */
.use(function(req, res, next){
res.redirect('/todo');
});
var io = require('socket.io').listen(server);
io.sockets.on('connection',function(socket){
socket.emit('todolist_refresh','refresh un deux un deux');
console.log('test one two one two');
// console.log(this.session.todolist);
// socket.broadcast.emit('todolist', });
});
server.listen(8080);
... ,
var io = require('socket.io').listen(server);
io.sockets.on('connection',function(socket){
socket.emit('todolist_refresh','refresh un deux un deux');
console.log('test one two one two');
// console.log(this.session.todolist);
// socket.broadcast.emit('todolist', });
socket.on('new-todo' , todo => {
io.sockets.broadcast.emit('new-todo' , todo );
} ) ;
});
- Edité par SamuelGaborieau3 3 octobre 2019 à 15:17:25
Je te remercie pour ta réponse, analyser ton code m'a appris beaucoup de choses sur js et node mais malheureusement ça ne marche pas, tu avais oublié le }); à la fin de addEventListener mais malgré tout ça ne tourne pas, les données ne passent pas via la méthode fetch, j'ai bien un élément qui s'ajoute dans la liste mais sa valeur est undefined...
Bref, je vais essayer de débuger la fonction fetch().
Merci pour ton aide,
Axel
NodeJs - Faire un refresh en broadcast
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
suggestion de présentation.