2012-12-07 35 views
6

Tôi đang viết máy chủ proxy node.js, phục vụ yêu cầu API trên miền khác.Proxy Node.js có khả năng thay đổi tiêu đề phản hồi và thêm dữ liệu yêu cầu bổ sung

Tôi muốn sử dụng node-http-proxy và tôi đã tìm thấy a way to modify response headers.

Nhưng có một cách để sửa đổi dữ liệu theo yêu cầu với điều kiện (ví dụ: thêm khóa API) và có tính đến rằng có thể có phương pháp khác nhau theo yêu cầu - GET, POST, UPDATE, DELETE?

Hoặc có thể tôi đang làm hỏng mục đích của node-http-proxy và có điều gì đó phù hợp hơn với mục đích của tôi?

Trả lời

3

Một phương pháp làm cho nó khá đơn giản là sử dụng phần mềm trung gian.

var http = require('http'), 
    httpProxy = require('http-proxy'); 

var apiKeyMiddleware = function (apiKey) { 
    return function (request, response, next) { 
    // Here you check something about the request. Silly example: 
    if (request.headers['content-type'] === 'application/x-www-form-urlencoded') { 
     // and now you can add things to the headers, querystring, etc. 
     request.headers.apiKey = apiKey; 
    } 
    next(); 
    }; 
}; 

// use 'abc123' for API key middleware 
// listen on port 8000 
// forward the requests to 192.168.0.12 on port 3000 
httpProxy.createServer(apiKeyMiddleware('abc123'), 3000, '192.168.0.12').listen(8000); 

Xem Node-HTTP-Proxy, Middlewares, and You để xem chi tiết hơn và cũng có một số cảnh báo về phương pháp này.

+0

Steve, cảm ơn! Nó làm cho ý nghĩa về các tiêu đề. Có bất kỳ giải pháp nào để tinh chỉnh dữ liệu/thân yêu cầu, như thêm mã thông báo API không? – aliona

+0

@aliona Tôi nghĩ bạn có thể sửa đổi nó giống như ở trên với request.body, nhưng có lẽ bạn có thể cho chúng tôi biết khóa API dự kiến ​​sẽ nhận được như thế nào trong API bạn đang sử dụng. Nói chung tôi đã có thể mong đợi nó được trong chuỗi truy vấn hoặc tiêu đề. – explunit

+0

API dự kiến ​​mã thông báo api sẽ xuất hiện trong chuỗi truy vấn hoặc phần thân yêu cầu tùy thuộc vào phương thức yêu cầu 'GET',' POST', 'UPDATE' hoặc' DELETE' – aliona

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