2012-11-28 47 views
5

我创建聊天应用程序,使用nodejs(0.8.15),为注册用户表达(> 3.0)框架和mongodb。nodejs,socket.io:如何从套接字函数中获取请求和响应?

var express = require('express') 
    , http = require('http') 
    , path = require('path') 
    , io = require('socket.io'); 

var app = express() 
    , server = http.createServer(app) 
    , io = io.listen(server); 

    app.configure(function() { 
     app.set('port', process.env.PORT || 3000); 
     app.set('views', __dirname + '/views'); 
     app.set('view engine', 'ejs'); 
     app.use(express.favicon()); 
     app.use(express.logger('dev')); 
     app.use(express.bodyParser()); 
     app.use(express.methodOverride()); 
     app.use(express.cookieParser('secret')); 
     app.use(express.session({cookie: {maxAge: 60000*100}})); 
     app.use(app.router); 
     app.use(express.static(path.join(__dirname, 'public'))); 
    }); 

    app.configure('development', function() { 
     app.use(express.errorHandler()); 
    }); 

    app.get('/chat', function(req, res) { 
     res.render('chat'); 
    }); 

server.listen(app.get('port'), function() { 
    console.log("Express server listening on port " + app.get('port')); 
    }); 

io.sockets.on('connection', function (socket) { 
    socket.on('start-chat', function() { 
     // here i need to know req and res 
     // for example, i need to write: 
     // socket.username = req.session.username; 
    }); 
}); 

问:如何获得res和req对象在与上面的代码一样聊天时与他们一起工作?或者我会错误地创建与用户身份验证聊天的方式?

谢谢!

编辑:答案就在这里 http://www.danielbaulig.de/socket-ioexpress/

回答

4

你不能获得资源和REQ对象在socket.io处理程序,因为它们根本不存在 - socket.io是不正常的HTTP。

相反,您可以执行的操作是对用户进行身份验证并为其分配会话身份验证令牌(标识他们已登录的用户名和密码)。 然后客户端可以与每socket.io消息一起发送的验证令牌,和服务器端的处理程序可以只检查密钥的有效性在数据库:

3

您需要使用authorization。在socket.io v1.0和你上面

var socketIO = require('socket.io').listen(port); 
socketIO.set('authorization', function(handshakeData, cb) { 
    //use handshakeData to authorize this connection 
    //Node.js style "cb". ie: if auth is not successful, then cb('Not Successful'); 
    //else cb(null, true); //2nd param "true" matters, i guess!! 
}); 

socketIO.on('connection', function (socket) { 
    //do your usual stuff here 
}); 
-1

可以得到req对象这样

var req = socket.request; 
var res = req.res; 
+0

这是不对的。这与要求提出的请求不同。你不会在上面的socket.request中找到你的请求参数。 –

相关问题