我正在尝试将socket.io代码从0.9v重建为1.x. Express和socket.io是最新版本。
所以,错误:Cannot call method 'get' of undefined
在
io.on('connection', function(socket) {
console.log(socket.handshake);
var username = socket.handshake.user.get('username'); //<----here
......
这是我的代码:
module.exports = function(server) {
var io = require('socket.io')(server);
io.set('origins', 'localhost:*');
//I changed set to use, but it's doesn't matter i think
io.use(function(socket, next) {
var handshake = socket.request;
//io.set('authorization', function(handshake, callback) {
async.waterfall([
function(callback) {
handshake.cookies = cookie.parse(handshake.headers.cookie || '');
var sidCookie = handshake.cookies[config.get('session:key')];
var sid = connect.utils.parseSignedCookie(sidCookie, config.get('session:secret'));
//var sid = cookieParser.signedCookie(sidCookie, config.get('session:secret'));
loadSession(sid, callback);
}, ...continue...
延续:
function(session, callback) {
if (!session) {
callback(new HttpError(401, "No session"));
}
handshake.session = session;
loadUser(session, callback);
},
function(user, callback) {
if (!user) {
callback(new HttpError(403, "Anonymous session may not connect"));
}
handshake.user = user;
callback(null);
}
], function(err) {.....});
next();
});
io.on('connection', function(socket) { ... };
返回io; };
好的,请帮帮我,谢谢你!
答案 0 :(得分:0)
我将如何调试此内容。 无法在未定义的内容上调用方法
所以我们知道无论什么都在调用.get还没有创建。在这种情况下:
var username = socket.handshake.user.get('username'); //<----here
因此,如果您无法访问ide调试器,我首先要做的是
console.log(套接字)
如果有数据
的console.log(socket.handshake);
如果有数据
的console.log(socket.handshake.user);
如果有数据,请检查它是否具有GET方法。
无论如何,我的假设是socket.handshake.user
尚未定义。
设置它/暴露它的代码在哪里?