Node.js nodejs,socket.io:如何从socket函数获取请求和响应?
我正在创建聊天应用程序,为注册用户使用nodejs(0.8.15)、express(>3.0)框架和mongodbNode.js nodejs,socket.io:如何从socket函数获取请求和响应?,node.js,express,socket.io,Node.js,Express,Socket.io,我正在创建聊天应用程序,为注册用户使用nodejs(0.8.15)、express(>3.0)框架和mongodb var express = require('express') , http = require('http') , path = require('path') , io = require('socket.io'); var app = express() , server = http.createServer(app) , io = io.liste
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对象与它们一起工作?还是我用用户auth创建聊天的方式出错了
谢谢大家!
编辑:答案在这里
您无法在socket.io处理程序中获取res和req对象,因为它们根本不存在-socket.io不是正常的http 相反,您可以做的是对用户进行身份验证,并为他们分配一个会话身份验证令牌(一个标识用户登录和身份的密钥)。 然后,客户端可以将auth令牌与每个socket.io消息一起发送,服务器端处理程序只需检查数据库中密钥的有效性:
io.sockets.on('connection', function (socket) {
socket.on('start-chat', function(message) {
if (message.auth_token)
//Verify the auth_token with the database of your choice here!
else
//Return an error message "Not Authenticated"
});
您需要使用
授权
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
});
在
socket.iov1.0
及更高版本上,您可以获得如下req
对象
var req = socket.request;
var res = req.res;
这是错误的。这与正在讨论的请求不同。在上面的socket.request中找不到请求参数。