2016-09-24 6 views
0

Ich versuche, eine Live-Benutzer zählen auf meiner Website http://clickthebutton.herokuapp.com, die Express JS verwendet. Beim Versuch, socket.io zu installieren bekomme ich diesen Fehler:Express.js 'socket.io/socket.io.js 404'

GET /socket.io/socket.io.js 404 1.911 ms - 1091 

Yes, I have used 'npm install socket.io --save'

Ich habe nach Antworten sah sich um, versuchte, sie und nichts geholfen hat. Wenn jemand denkt, dass er weiß, was passiert, würde eine Antwort sehr geschätzt werden! Hier ist mein Code:

app.js

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var io = require('socket.io')(app); 

var routes = require('./routes/index'); 
var users = require('./routes/users'); 

var app = require('express')(); 
var server = require('http').Server(app); 
var io = require('socket.io')(server); 

var server = app.listen(app.get('port'), function() { 
    console.log('server listening on port ' + server.address().port); 
}) 
var io = require('socket.io').listen(server); 
// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'ejs'); 

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', routes); 
app.use('/users', users); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handlers 

// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
    app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
     message: err.message, 
     error: err 
    }); 
    }); 
} 

// production error handler 
// no stacktraces leaked to user 
app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
    message: err.message, 
    error: {} 
    }); 
}); 

module.exports = app; 

index.ejs

  <!-- socket.io --> 
      <script src="socket.io/socket.io.js"></script> 
      <script type="text/javascript"> 
      var socket = io.connect(); 
      </script> 
     </div> 
    </center> 
    </body> 

Routen/index.js

var express = require('express'); 
var router = express.Router(); 
var redis = require('redis'), client = redis.createClient(secret, "secret"); client.auth("secret", function() {console.log("Connected!");}); 
var app = express(); 
var server = require('http').Server(app); 
var http = require('http'); 

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

io.on('connection', function(socket){ 
    console.log('a user connected'); 
    console.log(Object.keys(io.sockets.connected)); 
}); 


io.on('connection', function (socket) { 
    console.log('Socket.io connected!') 
}); 

I only copy/pasted the code that referenced socket.io

Dank!

+0

Was ist dein Setup? Sie erwähnen eine öffentlich gehostete Site, dann zeigen Sie Code an, der nur auf localhost/127.0.0.1 hört. Außerdem hat der Code auf Ihren gehosteten Sites viele Verweise auf localhost: 3001 und port 3001, wenn der Code, den Sie eingefügt haben, den Port 8080 verwendet hat ... Stellen Sie bitte einen konsistenten Code und ein Live-Beispiel bereit. – jcaron

+0

@jcaron Aktualisiert. –

+0

Immer noch nicht konsistent mit dem, was Sie auf Ihrer gehosteten Website haben (wo der Fehler nicht einmal übereinstimmt). – jcaron

Antwort

1

In app.js allein Sie erstellen drei Instanzen socket.io, und wieder in routes/index.js. Es sollte nur eine in der gesamten App geben.

Eine gemeinsame Einrichtung für Express sieht wie folgt aus:

var app = require('express')(); 
var server = app.listen(app.get('port'), function() { 
    console.log('server listening on port ' + server.address().port); 
}); 
var io = require('socket.io')(server); 

Wenn Sie verweisen müssen entweder app, server oder io in anderen Dateien, müssen Sie es als eine Variable zu übergeben.

EDIT: weil Sie einen express-generator basierten Setup verwenden, wird der HTTP-Server in bin/www und nicht app.js erstellt werden. In diesem Fall müssen Sie auch dort den socket.io-Server erstellen:

/** 
* Create HTTP server. 
*/ 

var server = http.createServer(app); 
var io = require('socket.io')(server); // add this line 

Auch wenn Sie io woanders in Ihrer Codebasis verweisen müssen, müssen Sie es von dort entlang passieren.

+0

Ich habe die Referenzierung von socket.io in meiner index.js eingeschränkt, aber es wird immer noch ein 404-Fehler zurückgegeben. –

+0

Da Ihre 'app.js' 'app' exportiert, haben Sie auch eine' bin/www', die einen HTTP-Server starten kann? – robertklep

+0

'npm start' löst' node .bin/www' aus. –