2010-10-09 25 views
7

trong ví dụ rất đơn giản này:Làm thế nào để có được thông tin về các khách hàng trong Node.js

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.) Những loại thông tin tôi có thể nhận được từ các khách hàng? như trình duyệt, độ phân giải màn hình, v.v ...?

2.) Làm cách nào để gửi thông tin từ máy khách đến máy chủ, như thông số?

cảm ơn!

Trả lời

5

Bạn không thể nhận được các thông tin độ phân giải màn hình, nhưng bạn có thể nhận được user agent từ Tiêu đề yêu cầu "User-Agent"

+0

Mã cần thiết cho việc này là gì? Tôi đã thử req.getHeader ('User-Agent') nhưng không nghĩ rằng nó hoạt động. – zzaman

+11

@zzaman thử req.headers ['user-agent'] - tất cả các tiêu đề trong nút [là chữ thường] (http://nodejs.org/docs/latest/api/http.html#http_request_headers). – phreakhead

6

Bạn đã đọc API docs chưa? Đối tượng req là một đối tượng http.ServerRequest như được ghi lại ở đó. Đó là HTTP và những thứ như độ phân giải không phải là một phần của giao thức. Những gì bạn có thể nhận được là tác nhân người dùng và từ đó bạn có thể truy xuất thêm thông tin bằng cách sử dụng một dịch vụ khác. Hãy nhớ rằng node.js là một ứng dụng độc lập - nó không chạy trong trình duyệt - đó là một ứng dụng HTTP Server đang chạy trong một trình thông dịch JS.

+0

Liên kết đã chết, chỉ một FYI – TERMtm

+0

Cảm ơn - đã cập nhật. –

16

1) URL giới thiệu, địa chỉ IP, User Agent, kích thước màn hình và stats khác. Bạn cũng có thể nhận được vị trí địa lý nhưng điều đó có liên quan nhiều hơn.

2) Một số dữ liệu có sẵn trong tiêu đề để chúng được gửi theo mọi yêu cầu - các dữ liệu khác như kích thước màn hình hơi phức tạp hơn nên bạn sẽ muốn gửi yêu cầu 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(); 
} 
+0

Đối với 'referrer', các trình duyệt [sẽ gửi] (https://en.wikipedia.org/wiki/HTTP_referer#Etymology)' referer' với một R. Express đơn không dịch nó thành đúng chính tả, vì vậy các nhu cầu trên 'req.headers ['referer']'. – Arjan

+0

@Arjan chúng có thể hoán đổi cho nhau. Express có thể xử lý ether một. https://github.com/expressjs/express/blob/master/lib/request.js#L76 – cyberwombat

+0

Thật kỳ lạ, như tôi đã kiểm tra trước khi đăng nhận xét đó (và thậm chí thêm nhận xét trong mã của tôi giải thích Express không dịch .. .). Sẽ kiểm tra lại vào ngày mai, nhưng liên kết của bạn không nói dối ... :-) – Arjan

Các vấn đề liên quan