【发布时间】:2014-08-10 02:34:24
【问题描述】:
我正在尝试使用 Node.js、Express.js 和 Socket.IO 编写一个小应用程序。
服务器运行良好,我可以提供 HTML 和其他静态内容。但是我让客户端通过 Socket.IO 连接到服务器时遇到了麻烦。
当我不使用 Express 时,它可以正常工作,但使用 Express 时,我似乎无法让一切都合作。我不确定在结合使用 Express 和 Socket.IO 时是否有一些特殊的注意事项。
我的一部分认为这可能是路线问题?
看起来当套接字尝试连接时它是 404'ing:
GET http://localhost:3000/socket.io/1/?t=1403186531515 400 Bad Request 1ms
服务器代码:
var express = require('express')
, app = express()
, http = require('http')
, server = http.createServer(app).listen(3000)
, io = require('socket.io').listen(server)
, favicon = require('static-favicon')
, logger = require('morgan')
, cookieParser = require('cookie-parser')
, session = require('express-session')
, routes = require('./routes/index')
, path = require('path')
, bodyParser = require('body-parser');
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hjs');
app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(session({secret: 'keyboard cat'}));
app.use(require('less-middleware')(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);
// 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: {}
});
});
io.sockets.on('connection', function (socket) {
//message new connection
socket.emit('message', { message: 'Message from server.' });
//message all connections
socket.on('send', function (data) {
io.sockets.emit('message', data);
});
});
客户端代码:
** html and other js omitted **
<script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/0.9.16/socket.io.min.js"></script>
<script>
var socket = io.connect('http://localhost:3000');
</script>
我也试过了
var socket = io.connect('ws://localhost:3000');
无济于事。
感谢您的帮助!
【问题讨论】:
-
^我第一次听说它,我检查一下。谢谢。
-
Express.io 已经过时,不再更新。
-
有类似的替代品吗?
-
你能在哪里解决这个问题?我现在也遇到了同样的问题
-
我无法解决它,但我已经有一段时间没有再尝试过了,所以我将在这里重新审视一些答案。
标签: node.js express socket.io http-status-code-404