Node.js,Socket.io:如何获取客户端浏览器语言?

时间:2014-03-28 10:38:16

标签: javascript node.js sockets socket.io locale

我正在尝试使用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);
}

我希望你得到我想做的事情,也许知道更好的解决方案。 提前谢谢。

1 个答案:

答案 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']);
});