2011-11-01 31 views
75

Câu hỏi khá đơn giản. Tôi muốn sử dụng máy chủ Node.js làm proxy để ghi nhật ký, xác thực và chuyển tiếp truy vấn HTTP đến máy chủ HTTP phụ trợ (yêu cầu PUT, GET và DELETE).Cách thực hiện các yêu cầu HTTP bên ngoài với Node.js

Tôi nên sử dụng thư viện nào cho mục đích đó? Tôi sợ tôi không thể tìm thấy một.

Trả lời

121

NodeJS hỗ trợ http.request như một mô-đun tiêu chuẩn: http://nodejs.org/docs/v0.4.11/api/http.html#http.request

var http = require('http'); 

var options = { 
    host: 'example.com', 
    port: 80, 
    path: '/foo.html' 
}; 

http.get(options, function(resp){ 
    resp.on('data', function(chunk){ 
    //do something with chunk 
    }); 
}).on("error", function(e){ 
    console.log("Got error: " + e.message); 
}); 
+10

Tôi khuyên bạn nên thêm 'resp.setEncoding ('utf8');' (hoặc bất kỳ mã hóa nào bạn đang sử dụng) để lấy dữ liệu dưới dạng chuỗi utf8. Nếu tôi đã hiểu đúng, nếu không bạn sẽ nhận được các đối tượng đệm và có thể sẽ gặp rắc rối với các ký tự nhiều byte nếu một ký tự nhiều byte được chia thành hai khối. (Chỉ cần gỡ lỗi một vấn đề liên quan trong một thời gian) – Touko

+7

Tôi đã thực sự bắt đầu sử dụng 'yêu cầu 'npm mô-đun nhiều hơn nữa. – chovy

0

Bạn có thể sử dụng mô-đun http node.js để thực hiện điều đó. Bạn có thể kiểm tra tài liệu tại Node.js HTTP.

Bạn cũng cần truyền chuỗi truy vấn đến Máy chủ HTTP khác. Bạn nên có điều đó trong ServerRequest.url.

Một khi bạn có những thông tin, bạn có thể vượt qua trong Server backend HTTP và cổng trong các tùy chọn mà bạn sẽ cung cấp trong http.request()

7

tôi sẽ kết hợp node-http-proxyexpress.

node-http-proxy sẽ hỗ trợ proxy bên trong máy chủ web node.js của bạn qua RoutingProxy (xem ví dụ được gọi là Yêu cầu proxy trong máy chủ http khác).

Bên trong logic máy chủ tùy chỉnh của bạn, bạn có thể thực hiện xác thực bằng Express. Xem auth sample here for an example.

Kết hợp hai ví dụ này sẽ cung cấp cho bạn những gì bạn muốn.

4

Bạn có thể sử dụng mô-đun http được cài sẵn để thực hiện http.request().

Tuy nhiên nếu bạn muốn đơn giản hóa API bạn có thể sử dụng một mô-đun như superagent

+3

Phần lớn api saner thực sự. Tôi không đổ lỗi cho nút để cung cấp chỉ API cấp thấp nhưng bắt đầu xử lý khối dữ liệu chỉ đơn giản là gây phiền nhiễu. –

1

nút-http-proxy là một giải pháp tuyệt vời như đã được đề xuất bởi @hross trên. Nếu bạn không chết khi sử dụng nút, chúng tôi sử dụng NGINX để thực hiện tương tự. Nó hoạt động thực sự tốt với nút. Ví dụ, chúng tôi sử dụng nó để xử lý các yêu cầu SSL trước khi chuyển tiếp chúng tới nút. Nó cũng có thể xử lý các tuyến đệm và chuyển tiếp. Yay!

7

thời gian gần đây tôi phát hiện ra REQUESTIFY.

Nhận yêu cầu:

requestify.get('http://example.com').then(function(response) { 
    // Get the response body 
    response.getBody(); 
}); 

Đăng lên Json:

requestify.post('http://example.com', { 
     hello: 'world' 
    }) 
     .then(function(response) { 
      // Get the response body (JSON parsed or jQuery object for XMLs) 
      response.getBody(); 

      // Get the raw response body 
      response.body; 
     }); 

Hope this helps

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