Passer une variable depuis nodejs vers html avec socket io emit [Résolu]

Signaler
Messages postés
12
Date d'inscription
mercredi 31 mars 2021
Statut
Membre
Dernière intervention
7 avril 2021
-
Messages postés
12
Date d'inscription
mercredi 31 mars 2021
Statut
Membre
Dernière intervention
7 avril 2021
-
Bonjour,
Depuis plusieurs jours je cherche à passer une donnée depuis le serveur nodejs vers une page html. Jusqu'à présent je passais un message du type ("message") depuis le nodejs vers la page html et ça fonctionnait bien. Maintenant je veux passer une variable mais je n'y arrive pas. Pourtant ça ne doit pas être beaucoup plus compliqué.
Voici ce que j'ai fait, code nodejs (récupération de la variable depuis un code python puis transfert vers html):

app.post('/timer', function(req, res){                 
res.sendFile(__dirname + '/public/status.html');
var info = req.body;
io.emit('messageFromServer', info);
console.log(info)
});



Voici le code html :

<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect();
socket.on('messageFromServer',function(data) {
console.log(data.messageFromServer); });
</script>



A mon sens c'est mon script de la page html qui n'est pas bon. Je ne connais pas bien le javascript et c'est pour cela que je galère..
J'ai essayé plusieurs configurations, sans succès. Si vous pouviez m'indiquer quelques pistes pour orienter mes recherches.
En vous remerciant.

3 réponses

Messages postés
12
Date d'inscription
mercredi 31 mars 2021
Statut
Membre
Dernière intervention
7 avril 2021

Bonjour,

Le truc c'est que je veux afficher sur la page html la variable "info", qui existe car lorsque je l'affiche sur la console nodejs ( console.log(info) ) alors cela m'affiche bien les infos demandées. Donc de ce coté c'est ok.


La ou ça bloque c'est que mon script sur ma page html n'est pas bon. Les 2 lignes ne doivent pas aller :

socket.on('messageFromServer', function (data) {
console.log(data.messageFromServer); });


Je ne sais pas comment "dire" au script : "récupère la variable" et "écrit la dans la page html".


=======================

Je viens de tester une autre méthode :

script de la page html :


     

<ul id="messagesList">

</ul>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
var list = document.getElementById("messagesList");
socket.on('messageFromServer', function (data) {
var item = document.createElement('li');
item.innerHTML = data;
list.appendChild(item);
});
</script>




code nodejs :

app.post('/timer', function(req, res){                  
res.sendFile(__dirname + '/public/status.html');
var info = req.body;
io.emit('messageFromServer', info);
console.log(info)
});



cela fonctionne partiellement car j'ai un affichage dans ma page html mais pas le bon..
En gros au lieu d'afficher la valeur transmise, ça affiche : [object Object]

Les infos que je veux afficher sont : {'time' : temps}
temps étant un entier.

Messages postés
12
Date d'inscription
mercredi 31 mars 2021
Statut
Membre
Dernière intervention
7 avril 2021

Pour suite, j'ai testé la modification :

<ul id="messagesList">

</ul>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
var list = document.getElementById("messagesList");
socket.on('messageFromServer', function (data) {
var item = document.createElement('li');
item.innerHTML = data.time;
list.appendChild(item);
});
</script>


quand j'exécute le tout, j'ai maintenant l'affichage " undefined " dans la zone ou je souhaite afficher les infos.
La question reste alors comment définir ma variable ...
Messages postés
12
Date d'inscription
mercredi 31 mars 2021
Statut
Membre
Dernière intervention
7 avril 2021

En fait ce code fonctionne et affiche les valeurs (entiers) contenus dans ma variable initiale. Donc c'est ok.