web-dev-qa-db-fra.com

socket.io, io n'est pas défini (erreur JS)

Je viens de commencer avec socket.io, son erreur JS donnant sur la page client

io n'est pas défini

Comment régler ceci ?

24
Mark

mettre <script src="http://yournodeserver/socket.io/socket.io.js"></script> dans votre code

23
Emmerman

Alternativement, vous pouvez utiliser le Socket.io CDN :

<script src="https://cdn.socket.io/socket.io-1.0.0.js"></script>
36
Nev Stokes

J'ai rencontré le même problème lors de l'utilisation d'Express. Même mettre le serveur: le port à l'intérieur du script ne fonctionnerait pas.Après le démarrage du serveur, je ferais en sorte que le socket écoute ce port, c'était une erreur je suppose.Le changer ci-dessous fonctionne très bien

var app = express();
app.set('port', process.env.PORT || 3000);
var server = http.createServer(app);
var io = require('socket.io').listen(server);
server.listen(app.get('port'));

Côté client, je viens d'inclure le script

 <script src="/socket.io/socket.io.js"></script>
7
deven98602

J'ai une application socket sur laquelle mon serveur (pas un CDN) sert le script socket.io.js. Ainsi, même si Emmerman a raison de dire que vous devez inclure la balise de script dans le code HTML de votre client, l'actif ne sera pas chargé si votre back-end est en panne. Une option consiste à écrire un script JS côté client qui vérifie io avant d'essayer d'utiliser socket.io. S'il n'est pas présent (indéfini/nul), vous pouvez soit montrer sous condition autre chose comme "serveur en panne" ou dans mon cas, je vais définir un minuteur qui vérifie périodiquement jusqu'à ce que le serveur soit restauré.

[MISE À JOUR 2] J'ai fini par devoir inclure la balise de script, vérifier l'existence de l'objet io et faire un window.location.reload () après 10 secondes (en utilisant setTimeout) (ce qui finira par espérons que le script est chargé et que io existe, après quoi je peux me connecter au serveur de socket.)

[MISE À JOUR] Je charge le script avec un appel ajax plutôt que d'utiliser une balise de script html. Ensuite, avec la minuterie, je vérifie périodiquement si le script se chargera - éventuellement, quand le serveur sera restauré/redémarré. Réf jQuery pour charger dynamiquement les scripts JS: http://api.jquery.com/jQuery.getScript/

2
ABCD.ca
<script src="http://cdnjs.cloudflare.com/ajax/libs/socket.io/0.9.16/socket.io.min.js"></script>

il s'agit de la dernière version de socket.io à inclure.

1
Sangram Singh

http://socket.io/download/ - la page officielle du dernier cdn.

0
Tally Barak

Enveloppez votre code client sur un '$ (document) .ready ()' pour jQuery ou une autre fonction similaire à une bibliothèque. De cette façon, vous serez sûr que votre code s'exécute après le chargement de la bibliothèque.

0
Garlou