2015-09-10 2 views
0

J'ai créé une application React isomorphe en utilisant Express et React-Engine. En ce moment j'essaie de connecter socket.io. Dans la configuration express JeOù est mon côté client socket.io?

var express = require('express'); 
var app = express(); 
var server = require('http').createServer(app); 
var io = require('socket.io')(server); 
... 
app.set('views', __dirname + '/public/views'); 

app.get('/', function(req, res) { 
    res.render(req.url, { 
    title: 'React Engine Express Sample App', 
    name: 'something' 
    }); 
}); 
... 
var server = app.listen(3000); 

io.on('connection', function (socket) { 
    socket.on('logIn', function (data) { 
     console.log(data);  
    }); 
}); 

À l'avant, j'ai un composant React Mise en page

var React = require('react'); 
var socket; 

module.exports = React.createClass({ 
    componentDidMount: function() {  
     socket = io();   
    }, 
    clicked: function() { 
     socket.emit('logIn', {name: "Dan"});  
     console.log("clicked"); 
    }, 
    render: function render() { 
     return (
      <html> 
      <body> 
       {this.props.children} 
       <button onClick={this.clicked}>click me</button> 
       <script src="/socket.io/socket.io.js"></script> 
      <script src='/bundle.js'></script> 
      </body>    
      </html> 
     ); 
    } 
}); 

La structure du projet est

index.js(express app) 
package.json 
/public 
    bundle.js(generated by webpack) 
    index.js(front-end routing setup) 
    routes.jsx 
    /views 
     app.jsx 
     layout.jsx(where the front end really starts) 

De tout ce que j'ai vu qui devrait fonctionner. L'application express devrait héberger les fichiers socket.io afin que je puisse l'attraper sur le frontal. Malgré cela, ni ceci ni localhost: 3000/socket.io/socket.io.js ont fonctionné. J'ai même essayé quelques chemins relatifs différents. Comment puis-je trouver mes fichiers socket.io côté client?

+0

Avez-vous démarré le serveur de noeud? 'noeud index.js' –

Répondre

1

La séquence que je utilise cette règle fonctionne:

var express = require('express'); 
var app = express(); 
var server = app.listen(8081); 
var io = require('socket.io').listen(server); 

Je ne sais pas exactement quel aspect de la vôtre pourrait être la cause du problème, mais il est différent que cela, surtout dans la façon dont vous configurez la serveur (vous attribuez deux valeurs différentes à votre variable server qui ne semble pas correcte) et comment vous initialisez socket.io.

En outre, j'ai vu certaines personnes avec la version client de socket.io installée côté serveur, pas la version du serveur qui, évidemment, ne vous donnera pas la possibilité de servir le fichier /socket.io/socket.io. fichier js donc ça vaut le coup de vérifier.