2012-12-07 6 views
6

Ich bin ein node.js Proxy-Server zu schreiben, Anforderungen an eine API auf anderen Domäne dient.Node.js Proxy mit der Fähigkeit Antwort-Header zu ändern und injizieren zusätzliche Anforderungsdaten

Ich möchte node-http-proxy verwenden und ich habe bereits a way to modify response headers gefunden.

Aber ist es eine Möglichkeit, Anforderungsdaten unter der Bedingung (d Hinzufügen von API-Schlüssel) und unter Berücksichtigung der zu modifizieren, dass es möglicherweise unterschiedliche Methoden Anfrage sein - GET, POST, UPDATE, DELETE?

Oder vielleicht vermassele ich den Zweck node-http-proxy und es ist etwas besser geeignet, um meinen Zweck?

Antwort

3

Ein Ansatz, der es ganz einfach macht, ist Middleware zu verwenden.

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

Siehe Node-HTTP-Proxy, Middlewares, and You für weitere Einzelheiten und auch einige Vorsichtsmaßnahmen auf dem Ansatz.

+0

Steve, danke! Es macht Sinn in Bezug auf Header. Gibt es Lösungen für die Optimierung von Anforderungsdaten/-körper selbst, z. B. das Hinzufügen eines API-Tokens? – aliona

+0

@aliona Ich glaube, Sie es wie oben mit request.body ändern können, aber vielleicht können Sie uns sagen, wie API-Schlüssel wird voraussichtlich in der API empfangen werden Sie verwenden. Normalerweise hätte ich erwartet, dass es entweder in Querystring oder Kopfzeilen ist. – explunit

+0

API erwartet api Token vorhanden sein entweder in Abfragezeichenfolgeflag oder Anfrage Körper auf Anfrage Methode abhängig 'GET',' Post', 'UPDATE' oder' delete' – aliona