Passer une variable depuis nodejs vers html avec socket io emit

Résolu/Fermé
wanwanwan Messages postés 14 Date d'inscription mercredi 31 mars 2021 Statut Membre Dernière intervention 12 avril 2021 - 6 avril 2021 à 19:42
wanwanwan Messages postés 14 Date d'inscription mercredi 31 mars 2021 Statut Membre Dernière intervention 12 avril 2021 - 7 avril 2021 à 14:30
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.
A voir également:

3 réponses

wanwanwan Messages postés 14 Date d'inscription mercredi 31 mars 2021 Statut Membre Dernière intervention 12 avril 2021
Modifié le 7 avril 2021 à 10:01
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.

wanwanwan Messages postés 14 Date d'inscription mercredi 31 mars 2021 Statut Membre Dernière intervention 12 avril 2021
7 avril 2021 à 12:07
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 ...
wanwanwan Messages postés 14 Date d'inscription mercredi 31 mars 2021 Statut Membre Dernière intervention 12 avril 2021
7 avril 2021 à 14:30
En fait ce code fonctionne et affiche les valeurs (entiers) contenus dans ma variable initiale. Donc c'est ok.