2013-08-28 21 views
40

Tôi đang sử dụng express.js và tôi cần biết miền đang bắt nguồn cuộc gọi. Đây là mã đơn giảnLàm cách nào để miền nhận được yêu cầu trong express.js?

app.get(
    '/verify_license_key.json', 
    function(req, res) { 
     // do something 

Làm cách nào để lấy miền từ req hoặc đối tượng res? Tôi có nghĩa là tôi cần phải biết nếu api được gọi bởi somesite.com hoặc someothersite.com. Tôi đã thử làm một console.dir của cả hai reqres nhưng tôi không có ý tưởng từ đó, cũng đọc tài liệu nhưng nó đã cho tôi không có sự giúp đỡ.

+1

thử: 'req.host' hoặc' req.get ('host') '[thể hiện tài liệu] (http: //expressjs.com/api.html#req.host) – dc5

+0

node.js: 'req.headers [" x-chuyển tiếp-cho "] || req.connection.remoteAddress' [x-chuyển tiếp-cho] (http://en.wikipedia.org/wiki/X-Forwarded-For) sẽ bao gồm các căn cứ của bạn đằng sau một proxy, cân bằng tải ... –

+0

Tôi nhận được cảnh báo này : fast deprecated req.host: Sử dụng req.hostname thay vì index.js: 20: 8 –

Trả lời

65

Bạn phải truy xuất từ ​​HOST header.

var host = req.get('host'); 

Tùy chọn với HTTP 1.0, nhưng được yêu cầu bởi 1.1. Và, ứng dụng luôn có thể áp đặt yêu cầu của riêng nó.


Nếu đây là để hỗ trợ cross-origin requests, bạn sẽ thay vì sử dụng các Origin tiêu đề.

var origin = req.get('origin'); 

Lưu ý rằng một số yêu cầu cross-nguồn gốc yêu cầu xác nhận thông qua một "preflight" request:

req.options('/route', function (req, res) { 
    var origin = req.get('origin'); 
    // ... 
}); 

Nếu bạn đang tìm kiếm chỉ IP của khách hàng, bạn có thể lấy điều đó với:

var userIP = req.socket.remoteAddress; 

Lưu ý rằng, nếu máy chủ của bạn là sau một proxy, điều này sẽ có khả năng cung cấp cho bạn IP của proxy. Việc bạn có thể nhận IP của người dùng hay không phụ thuộc vào thông tin mà proxy truyền đi. Nhưng, nó thường sẽ nằm trong tiêu đề.

+0

Nhưng điều này không cho tôi host host api? Nó có thể được gây ra bởi thực tế là tôi đang làm điều này cục bộ và tôi có api.time.ly thiết lập để giải quyết đến 127.0.0.1 và cuộc gọi tôi đang thực hiện là từ localhost, nhưng nếu tôi sử dụng, host là "api.time.ly" tôi cần phải biết tên miền đang gọi cho tôi. tôi sẽ kiểm tra điều này trên một trang web trực tiếp. –

+0

@NicolaPeluchetti Tôi đoán tôi không hiểu ý bạn là gì bởi "* tên miền đang gọi tôi *." Các máy khách HTTP thường không cung cấp tên máy chủ riêng của họ trong yêu cầu. Đây có phải là [CORS] (http://en.wikipedia.org/wiki/Cross-origin_resource_sharing) không? –

+0

Tôi có api trung tâm được đặt tại api.time.ly. Api này được gọi bởi các trang web khách hàng khác nhau mà cài đặt plugin wordpress của chúng tôi.Vì vậy, chúng tôi có thể có http://church1.com và http://sauna1.com thực hiện cuộc gọi đến api của chúng tôi. Trong API tôi có thể nhận được nếu cuộc gọi được thực hiện từ http://church1.com hoặc từ http://sauna1.com? tôi thấy một tiêu đề ''user-agent': 'WordPress/3.6; http: // localhost/wordpress_clean'' tôi có nên phân tích cú pháp đó không? –

5

Thay vì:

var host = req.get('host'); 
var origin = req.get('origin'); 

bạn cũng có thể sử dụng:

var host = req.headers.host; 
var origin = req.headers.origin;