2012-11-28 15 views
5

मैं पंजीकरण उपयोगकर्ताओं के लिए नोडजेस (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

आप रेस और अनुरोध वस्तुओं एक socket.io हैंडलर में नहीं मिल सकता है, के रूप में वे बस मौजूद नहीं है है - socket.io सामान्य http नहीं है।

इसके बजाय, आप क्या कर सकते हैं उपयोगकर्ताओं को प्रमाणित करते हैं और उन्हें एक सत्र ऑथ टोकन असाइन करते हैं (एक कुंजी जो पहचानती है कि वे लॉग इन हैं और वे कौन हैं)। तो ग्राहक हर socket.io संदेश के साथ प्रमाणीकरण टोकन भेज सकते हैं, और सर्वर साइड हैंडलर बस डेटाबेस में कुंजी की वैधता की जांच कर सकते हैं:

3

आप authorization उपयोग करने के लिए की जरूरत है।

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

socket.io v1.0 पर और आप ऊपर इस

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

यह गलत है की तरह req वस्तु प्राप्त कर सकते हैं। यह वही अनुरोध नहीं है जिसे प्रश्न में पूछा जा रहा है। आपको उपरोक्त socket.request में आपका अनुरोध पैरामीटर नहीं मिलेगा। –