2011-11-01 30 views
75

La pregunta es bastante simple. Deseo utilizar un servidor Node.js como proxy para registrar, autenticar y reenviar consultas HTTP a un servidor HTTP de fondo (solicitudes PUT, GET y DELETE).Cómo realizar solicitudes HTTP externas con Node.js

¿Qué biblioteca debo usar para ese fin? Me temo que no puedo encontrar uno.

Respuesta

121

NodeJS apoya http.request como un módulo estándar: 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

Recomendaría agregar 'resp.setEncoding ('utf8');' (o la codificación que esté usando) para obtener datos como cadenas utf8. Si he entendido bien, de lo contrario obtendrá objetos Buffer y podría terminar teniendo problemas con caracteres de varios bytes si un carácter de múltiples bytes se divide en dos partes. (Hace un tiempo resolvió un problema relacionado) – Touko

+7

De hecho, he comenzado a usar el módulo 'request' npm mucho más. – chovy

0

Puede usar el módulo http node.js para hacer eso. Puede consultar la documentación al Node.js HTTP.

Debería pasar la cadena de consulta también al otro servidor HTTP. Deberías tener eso en ServerRequest.url.

Una vez que tenga los datos, se puede pasar en el servidor back-end HTTP y el puerto en las opciones que se le concedan en el http.request()

7

Me gustaría combinar node-http-proxy y express.

nodo-http-proxy apoyará un proxy dentro de su servidor web a través de Node.js RoutingProxy (véase el ejemplo llamada solicitudes de proxy en otro servidor http).

Dentro de la lógica de su servidor personalizado, puede realizar la autenticación mediante express. Vea el auth sample here for an example.

Combinar esos dos ejemplos debería darle lo que desea.

4

Puede usar el módulo incorporado http para hacer un http.request().

Sin embargo, si desea simplificar la API se puede utilizar un módulo como superagent

+3

API más sano Mucho de hecho. No culpo al nodo por proporcionar solo API de bajo nivel, pero comenzar a manejar trozos de datos es simplemente molesto. –

1

nodo-http-proxy es una gran solución como fue sugerido por @hross anteriormente. Si no está en desventaja al usar un nodo, usamos NGINX para hacer lo mismo. Funciona muy bien con el nodo. Lo usamos, por ejemplo, para procesar solicitudes SSL antes de reenviarlas a un nodo. También puede manejar rutas de caché y reenvío. ¡Hurra!

7

Recientemente he descubierto REQUESTIFY.

petición GET:

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

mensaje a 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; 
     }); 

Esperanza esto ayuda

Cuestiones relacionadas