2014-02-03 2 views
0

Не понимаю, где моя проблема. Когда я кладу это:Не удается выполнить работу socket.io с моим рукопожатием

io = require('socket.io').listen(server).of("/"); 

я мое рукопожатие выглядит отлично работает, но все события моего Socket.io в (как соединение) никогда не работает. И когда я, когда я поставил этот

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

Я получил это:

TypeError: Object # has no method 'authorization'

Если удалить мое рукопожатие, все воля Socket.io работает, но мне нужно это:/

Здесь мои app.js

const express = require('express') 
    , app = express() 
    , http = require('http') 
    , ejs = require('ejs') 
    , server = http.createServer(app) 
    , port = process.env.PORT || 1337 
    , io = require('socket.io').listen(server).of("/") 
    ; 



module.exports = { app: app, server: server }; 
// Grab "cookie" and "connect" from express 
var connect = require('express/node_modules/connect') 
var cookie = require('express/node_modules/cookie') 
var connectes =[]; 


app.configure(function(){ 
    this.use("/public", express.static(__dirname + '/public')); 
    this.use(express.cookieParser()); 
    this.use(express.json()); 
    this.use(express.urlencoded()); 
    this.sessionStore = new express.session.MemoryStore({ reapInterval: 60000 * 10 }); 
    this.use(express.session({ 
     "secret": "some private string", 
     "store": this.sessionStore            
    })); 
}); 
app.engine('html', ejs.renderFile); 

app.set('views', __dirname + '/views'); 

app.get('/', [requireLogin], function(request, response) { 
    var pseudo = request.session.pseudo; 
    response.render('index.ejs.html',{connectes:connectes}); 
}); 

app.get('/login', function(request, response) { 
    response.render('login.ejs.html'); 
}); 

app.post("/login", function(req, res){ 
    if (req.param("user") != "") { 
     req.session.pseudo = req.param("user"); 
     //socket.set('pseudo',req.param("user")); 
     connectes.push(req.param("user")); 
     res.render('index.ejs.html',{connectes:connectes}); 
    }else{ 
     res.render('login.ejs.html'); 
    } 
}); 


const parseCookie = require('connect').utils.parseCookie; 
io.authorization(function (handshakeData, callback) { 
    var cookies = cookie.parse(handshakeData.headers.cookie); 
    console.log(cookie); 
}); 

io.on('connection', function(socket){ 
    console.log("This never appear in log :/"); 
    socket.on('login',function(user,callback){ 
     var pseudoValide = true; 
     for (var i = 0; i < connectes.length; i++) { 
      if(connectes[i]==user.pseudo){ 
       pseudoValide = false; 
       callback(true); 
      } 
     } 
     if (pseudoValide) { 
      socket.set('pseudo',user.pseudo); 
      pseudo = user.pseudo; 
      socket.broadcast.emit('newuser', pseudo); 
      socket.broadcast.emit('nvluseronline', pseudo); 
      connectes.push(pseudo); 
      callback(false,pseudo); 
     } 
    }); 
    socket.on('message',function(message){ 
     messageUser = message.message; 
     socket.get('pseudo',function(error, pseudo){ 
      io.sockets.emit('nouveauMessage',{pseudo:pseudo,message:messageUser}); 
     }) 
    }); 
    socket.on('disconnect',function(){ 
     socket.get('pseudo',function(error, pseudo){ 
      connectes = unset(connectes, pseudo); 
      io.sockets.emit('nvldisc', pseudo); 
     }) 

    }); 
}); 

function unset(array, value){ 
    var output=[]; 
    var index = array.indexOf(value) 
    { 
     var j = 0; 
     for(var i in array) 
     { 
      if (i!=index) 
      { 
       output[j]=array[i]; 
       j++; 
      } 
     } 
     return output; 
    } 
} 

/** Middleware */ 
function requireLogin (req, res, next) { 
    if (req.session.pseudo) { 
     console.log(req.session.pseudo); 
     next(); 
    }else{ 
     res.redirect("/login"); 
    } 
} 


if (!module.parent) { 
    server.listen(port, function() { 
    console.log('Listening', this.address()); 
    }) 
} 

Как вы можете видеть, я новичок потерян!

Спасибо, ребята!

ответ

0

Вы должны внимательно прочитать documentation. authorization метод существует только для пространств имен. При выполнении глобального разрешения, вы должны сделать:

io.configure(function(){ 
    io.set('authorization', function (handshakeData, callback) { 
    callback(null, true); // error first callback style 
    }); 
}); 

Это будет работать хорошо, если у вас есть .of("/") в качестве сервера конечной точки, но это пространство имен. Без пространств имен вам придется использовать вышеописанный метод.

+0

Спасибо, парень, я понимаю, где была моя ошибка, и теперь все работает отлично! :) – user3264208

Смежные вопросы