var socket = io.connect('http://localhost:3000');
var express = require('express');
var routes = require('./routes/index');
var user = require('./routes/user');
var chat = require('./routes/chat');
var http = require('http');
var path = require('path');
var MongoStore = require('connect-mongo')(express);
var settings = require('./settings');
var flash = require('connect-flash');
var multer = require('multer');
var app = express();
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(flash());
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({
secret:settings.cookiesSecret,
key:settings.db,
cookie:{maxAge:1000*60*60*24*30},
store:new MongoStore({
db:settings.db
})
}));
app.use(multer({
dest: './public/images/user',
rename: function (fieldname, filename) {
return filename;
}
}));
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname,'bower_components')));
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
routes(app);
var server = http.createServer(app);
var io = require('socket.io')(server);
io.on('connection', function(){ console.log('connection') });
server.listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
出错这个错误:
Request URL:http://localhost:3000/socket.io/1/?t=1420622609420
Status Code:400 Bad Request
服务器返回的错误信息是:{"code":0,"message":"Transport unknown"}
这是什么情况?求大神解答~~~
代码都没帖全,socket.io版本是多少,express版本是多少?
我断定你肯定是自己拷贝了一份
socket.io 0.9.x
版本的浏览器端js,然后在浏览器发起的ws请求而服务端
socket.io
版本是1.x
, 这两个版本根本不通用
!0.9.x
版本会先尝试建立websocket
连接,地址格式是/socket.io/1/?t=xxx
,如果服务器响应超时,或者拒绝,会fallback到polling
,服务端响应的数据格式是sid:interval_time:timeout_time:...
这样的,不会产生json
格式的响应1.x
版本会优先建立polling
请求,地址格式是/socket.io/?transport=polling&t=xxx
,然后upgrade到websocket
,服务端返回json
格式的配置文件,如果出现错误,返回的json格式就是{"code":0,"message":"xxx"}
所以你使用了0.9.x版本的客户端socket.io向1.x版本的服务端socket.io发起了请求,解决办法是使用
socket.io内置的js
,地址是/socket.io/socket.io.js
,这个js不需要你自己拷贝进去,直接就可以引用客户端用这个:
把端口删掉
另外,你socket.io用的是什么版本。现在已经是1.0了,记得更新哦。。。