【问题标题】:express-session, read vars on socket.io interactionexpress-session,在 socket.io 交互中读取 vars
【发布时间】:2015-07-23 20:52:16
【问题描述】:

我正在使用 express.js 和 socket.io 为网页的客户进行聊天,并且我正在尝试使用 express-session 管理会话,我的问题是,我如何读取会话值插座。 这是我的部分代码。

感谢您的帮助:)

var express         = require('express');
var app             = express();
var http            = require('http').Server(app);
var io              = require('socket.io')(http);
var bodyParser      = require('body-parser');
var session         = require('express-session');
var shortid         = require('shortid');

app.use(express.static('public'));
app.use( session({
        secret: 'dont move',
        resave: true,
        saveUninitialized: true
    })
);
app.use( bodyParser.urlencoded({ extended: true }) );
app.post('/chat', function(req, res){
        var sess = req.session;
        sess.ssid = shortid.generate();
        res.render('chat', { name: "name" });
});
io.on('connection', function(socket){
    socket.on('chat message', function( data ){
        if( data.msg.trim() != '' ){
            console.log('message: ' + data.msg);
            //Here I want to read the ssid session var, so I can manage many chats at the same time
        }
    });
    socket.on('disconnect', function(){
        console.log('Hey, someone disconected!');
    });
});
http.listen(3000, function(){
    console.log('listening on *:3000');
});

【问题讨论】:

    标签: node.js sockets express socket.io express-session


    【解决方案1】:

    可以配置socket授权

    var express         = require('express');
    var app             = express();
    var http            = require('http').Server(app);
    var io              = require('socket.io')(http);
    var bodyParser      = require('body-parser');
    var session         = require('express-session');
    var shortid         = require('shortid');
    
    app.use(express.static('public'));
    app.use( session({
            secret: 'dont move',
            resave: true,
            saveUninitialized: true
        })
    );
    app.use( bodyParser.urlencoded({ extended: true }) );
    app.post('/chat', function(req, res){
            var sess = req.session;
            sess.ssid = shortid.generate();
            res.render('chat', { name: "name" });
    });
    
    var util = require('util';
    var connect = require('connect');
    var parseSignedCookie = connect.utils.parseSignedCookie;
    
    io.configure(function () {
      io.set('authorization', function (data, callback) {
        if(data.headers.cookie) {
          data.cookie = cookie.parse(data.headers.cookie);
          data.sessionId = parseSignedCookie(data.cookie['ssid'], 'dont move');
        }
        callback(null, true);
      });
    
      io.on('connection', function(socket) {
        var sessionId    = socket.handshake.sessionId;
        socket.on('chat message', function( data ){
            if( data.msg.trim() != '' ){
                console.log('message: ' + data.msg);
                // NOW YOU CAN USE `sessionId`
            }
        });
        socket.on('disconnect', function(){
            console.log('Hey, someone disconected!');
        });
      });
    });
    
    http.listen(3000, function(){
        console.log('listening on *:3000');
    });
    

    【讨论】:

    • 我收到一个错误,这意味着我应该声明方法还是什么?还是我使用了错误的库? var parseSignedCookie = connect.utils.parseSignedCookie; ^ TypeError: Cannot read property 'parseSignedCookie' of undefined at Object. (/index.js:50:38) at Module._compile (module.js:460:26) at Object.Module._extensions..js ( module.js:478:10) 在 Module.load (module.js:355:32) 在 Function.Module._load (module.js:310:12) 在 Function.Module.runMain (module.js:501:10 ) 在启动时 (node.js:129:16) 在 node.js:814:3
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 2017-04-10
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    相关资源
    最近更新 更多