Pourquoi je Ne peut "GET /" sur mon server express?
J'ai écrit un minimaliste exemple d'un serveur avec node.js
avec qui je veux obtenir la console de notification que le client connecté. Je suis en utilisant la version suivante de modules
J'ai donc écrit ceci :
app.js
var socket = require('socket.io');
var express = require('express');
var http = require('http');
var app = express();
var server = http.createServer(app);
var io = socket.listen(server);
//var io = socket.listen(app);
io.sockets.on('connection',function(client){
console.log("Client connected...");
client.emit('messages', {hello: 'world'});
});
app.listen(8080);
index.html
<script src="node_modules/socket.io/lib/socket.io.js"></script>
<script>
var server = io.connect("http://localhost:8080");
server.on('messages', function(data){
alert(data.hello);
});
</script>
J'ai mon catalogue de structure comme suit:
|-- app.js
|-- index.html
`-- node_modules
|-- express
| |-- bin
| |-- client.js
| |-- History.md
| |-- index.js
| |-- lib
| |-- LICENSE
| |-- Makefile
| |-- node_modules
| |-- package.json
| |-- Readme.md
| `-- test.js
`-- socket.io
|-- benchmarks
|-- History.md
|-- index.js
|-- lib
|-- LICENSE
|-- Makefile
|-- node_modules
|-- package.json
`-- Readme.md
OriginalL'auteur Patryk | 2013-01-14
Vous devez vous connecter pour publier un commentaire.
Votre ligne :
doit être remplacé par
En faisant cela, vous êtes au service de la statique socket.io.js module pour le client directement via socket.io interne du serveur statique et non par ExpressJS lui-même!
EDIT 1 :
Oh et j'ai oublié de parler de la manière de servir votre index.html fichier donc, fondamentalement, vous devez définir
puis placez votre
index.html
fichier dans votre/public
répertoireEDIT 2 : ( explication )
ExpressJS sert des fichiers statiques internes gestionnaire de fichier statique. La ligne
app.use(express.static(__dirname + '/public'));
fait redirige vos demandes transmises à node.js pour votre dossier public.Socket.io, d'autre part ( comme une bibliothèque séparée ) a sa propre méthode pour servir ses fichiers statiques, et il est déclenché uniquement avec une requête GET qui contient l'URL :
/socket.io/socket.io.js
( même si il y a un autre fichier flash .swf qui est servi pour les navigateurs qui ne supportent pas les Websockets )Vous pouvez en apprendre plus à partir de la ExpressJS API et Socket.io wiki.
socket.io
et comment il fonctionne ?(où il pour cela)Bien sûr 😉 j'ai édité la réponse
OriginalL'auteur drinchev