2016-09-24 5 views
0

익스프레스 JS를 사용하는 웹 사이트 http://clickthebutton.herokuapp.com에 실시간 사용자 수를 포함 시키려고합니다. socket.io를 설치하려고 할 때이 오류를 얻을 :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'

내가 답을 주위를 둘러 보았다 한 그들 시도하고 아무것도 도움이 없다. 누군가가 자신이 무슨 일이 일어나고 있는지 알고 있다고 생각하면 응답을 부탁드립니다. /하는 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

감사

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> 

경로를 app.js : 여기 내 코드는!

+0

설정은 무엇입니까? 공개적으로 호스팅되는 사이트를 언급하면 ​​localhost/127.0.0.1에서만 수신하는 코드가 표시됩니다. 또한 호스팅 된 사이트의 코드에는 localhost : 3001 및 3001 포트에 대한 참조가 많이 있는데, 붙여 넣은 코드는 8080 포트를 사용했습니다 ... 일관된 코드 및 라이브 예제를 제공하십시오. – jcaron

+0

@jcaron 업데이트되었습니다. –

+0

여전히 호스트 사이트에있는 것과 일치하지 않습니다 (오류가 일치하지 않는 곳). – jcaron

답변

1

app.js 만 입력하면 세 개의 세 개의 인스턴스가 socket.io이고 다시 한 번 routes/index.js이됩니다. 앱 전체에 하나만 있어야합니다. Express에 대한

일반적인 설정은 다음과 같습니다

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); 

당신이 참조해야하는 경우

중 하나를 다른 파일에 app, server 또는 io, 당신은 변수로 전달해야합니다.

편집 : 당신이 express-generator 기반 설치를 사용하고 있기 때문에, HTTP 서버가 bin/www에서 생성되지 app.js됩니다. 이 경우, 당신은 또한 거기에 socket.io 서버를 만들어야합니다

/** 
* Create HTTP server. 
*/ 

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

을 다시 말하지만, 당신은 당신의 코드베이스에서 다른 곳 io를 참조해야하는 경우, 당신은 거기에서 함께 전달할 필요가있다.

+0

내 index.js에서 socket.io를 참조하는 것을 제한했지만 여전히 404 오류가 반환됩니다. –

+0

'app.js'가'app'를 내보내므로 HTTP 서버를 시작할 수있는'bin/www'도 있습니까? – robertklep

+0

'npm start'는'node .bin/www'를 시작합니다. –