2012-12-07 17 views
6

Farklı etki alanındaki bir API'ye istekte bulunarak bir node.js proxy sunucusu yazıyorum.Yanıt başlıklarını değiştirme ve ek istek verileri enjekte etme özelliğine sahip Node.js proxy'si

node-http-proxy kullanmak istiyorum ve zaten a way to modify response headers bulduk.

Ancak koşuluyla talep verilerini değiştirmek için bir yol yoktur (yani API anahtarı ekleme) ve farklı yöntemi talep olabileceğini dikkate alınarak - GET, POST, UPDATE, DELETE?

Ya da belki node-http-proxy amacını karıştırıyorum ve amacım için daha uygun bir şey var mı?

cevap

3

Oldukça basit olan bir yaklaşım, ara katman yazılımı kullanmaktır.

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); 

daha detaylı ve yaklaşım da bazı önlemlere ilişkin Node-HTTP-Proxy, Middlewares, and You bakınız.

+0

Steve, teşekkürler! Başlıklar açısından anlam ifade eder. API belirteci eklemek gibi, istek verilerini/gövdesini kendiniz ayarlamaya yönelik herhangi bir çözüm var mı? – aliona

+0

@aliona Yukarıdaki gibi request.body ile değiştirebileceğinizi düşünüyorum, ancak kullandığınız API'da API anahtarının nasıl alınacağının nasıl olacağını bize söyleyebilirsin. Genel olarak, ya querystring ya da başlıklarda olmasını beklerdim. – explunit

+0

API, sorgusuzun sorgulama yöntemine ya da istek türüne bağlı olarak istekte bulunmasını bekler. "GET", "POST", "UPDATE" veya "DELETE" – aliona

İlgili konular