【问题标题】:How to get information about the client in node.js如何在 node.js 中获取有关客户端的信息
【发布时间】:2011-04-23 03:58:41
【问题描述】:

在这个非常简单的例子中:

var sys = require("sys"),
    http = require("http");

http.createServer(function(request, response) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.end("Hello World!");
}).listen(8080);

sys.puts("Server running at http://localhost:8080/");

1.) 我可以从客户那里获得什么样的信息?比如浏览器、屏幕分辨率等?

2.) 如何将信息从客户端发送到服务器,例如参数?

谢谢!

【问题讨论】:

    标签: javascript real-time node.js


    【解决方案1】:

    1) 推荐人 URL、IP 地址、用户代理、屏幕大小和其他stats。 您还可以获取地理位置,但这涉及更多。

    2) 标头中提供了一些数据,因此这些数据会在每个请求时发送 - 其他数据(例如屏幕大小)有点棘手,因此您需要发出 ajax 请求来发送这些数据。

    // Somewhere on your page(s) - here we use jQuery
    $(document).ready(function(){   
      // Check if they have been logged
      if ($.cookie('logged') == null ){
        // Send screen size and whatever else that is not available from headers
        $.post('/logger', { width: screen.width, height: screen.height }, function(res) {
          // Set cookie  for 30 days so we don't keep doing this
           $.cookie('logged', true, { expires: 30 }); 
        });
      } 
     });  
    
    // Server side - example is an Express controller
    exports.logger = function(req, res) {
      var user = {
        agent: req.header('user-agent'(, // User Agent we get from headers
        referrer: req.header('referrer'), //  Likewise for referrer
        ip: req.header('x-forwarded-for') || req.connection.remoteAddress, // Get IP - allow for proxy
        screen: { // Get screen info that we passed in url post data
          width: req.param('width'),
          height: req.param('height')
        }
      };
      // Store the user in your database
      // User.create(user)...
      res.end();
    }
    

    【讨论】:

    • 对于referrer,浏览器will send referer 与单个R. Express 不会将其转换为正确的拼写,因此上述需要req.headers['referer']
    • @Arjan 它们是可以互换的。 Express可以处理以太一。 github.com/expressjs/express/blob/master/lib/request.js#L76
    • 这很奇怪,因为我在发布该评论之前进行了测试(甚至在我的代码中添加了一条评论,解释 Express 无法翻译......)。明天会再次检查,但您的链接不会说谎... :-)
    • 啊,在您的评论中,您指的是(很好的)辅助函数header('referrer')(它是req.get('referrer') 的别名,它确实可以处理refererreferrer。但是,在您的回答中,您正在直接访问请求属性headersreq.headers['referrer'],这会产生undefined。;-)
    • 确实!谢谢你抓住那个。我已经更新了使用帮助函数的答案。
    【解决方案2】:

    无法获取屏幕分辨率信息,但可以从Request Header "User-Agent"中获取用户代理

    【讨论】:

    • 这需要什么代码?我已经尝试过 req.getHeader('User-Agent') 但认为这不起作用。
    • @zzaman try req.headers['user-agent'] - 节点 are lowercase 中的所有标头。
    【解决方案3】:

    你读过API docs吗? req 对象是那里记录的 http.ServerRequest 对象。它是 HTTP,诸如解析之类的东西不是协议的一部分。您可以获得的是用户代理,并且您可以从那里使用其他服务检索更多信息。

    请记住,node.js 是一个独立的应用程序 - 它不是在浏览器中运行 - 它是一个在 JS 解释器中运行的 HTTP Server 应用程序。

    【讨论】:

      猜你喜欢
      • 2014-07-07
      • 2013-04-03
      • 2019-12-17
      • 1970-01-01
      • 2020-02-12
      • 2017-08-01
      • 2014-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多