我正在尝试使用socket.io和node.js来获取用户使用的语言,以便为播放视频提供正确的声音文件。 我是node.js和socket.io的初学者。我在客户端获得了语言" navigator.language"并希望在连接/握手socket.io时发送它。
var language = navigator.language;
var socket = io.connect('http://localhost:1337', { query: language });
在服务器端:
io.set('authorization', function(handshakeData, cb) {
console.log(handshakeData.query);
cb(null, true);});
但我得到的是:
{'en-US': 'undefined', t: '1396002389530'}
我猜第二个属性" t"是已添加的握手ID。但是我如何访问' en-US'?
我的第二种方法是使用模块" locale" (https://github.com/jed/locale),但是当我使用它时,我总是使用相同的语言,所以我认为它总能找到SERVER的语言。当新客户端请求页面并发送其http标头时,我以为我在请求/响应处理程序中使用它。
var handler = function(req, res) {
lang = new locale.Locales(req.headers["accept-language"]);
lang=lang.best(supported);
console.log(pf);
}
我希望你得到我想做的事情,也许知道更好的解决方案。 提前谢谢。
答案 0 :(得分:3)
你快到了。 这样做:
var socket = io.connect('http://localhost:1337', { lang: language });
而不是{query: language}
,因为查询是一个保留对象。
你可以通过这样做来访问它:
io.set('authorization', function(handshakeData, cb) {
console.log(handshakeData.query.lang);
cb(null, true);});
您也可以像这样访问它:
io.sockets.on('connection', function(socket){
console.log(socket.handshake.query.lang);
});
如果您不想将语言变量附加到query
,那么您可以通过以下方式访问该语言:
io.sockets.on('connection', function(socket){
console.log(socket.handshake.headers['accept-language']);
});