Solicitud de cliente de Node.js simple que se bloquea en Heroku
Pregunta
Estoy ejecutando Node.js en Heroku, y tengo una URL de prueba simple configurada en Express para hacer una solicitud de cliente, pero bloquea la aplicación cada vez y no estoy seguro de por qué.
Estoy tratando de hacer que el servidor haga una llamada simple para obtener https://graph.facebook.com/btaylor
Mi contenido relacionado de servidor.js:
app.get('/test', function(request, response) {
var http = require('http');
var test_client = http.createClient(443, "graph.facebook.com", true);
var facebook_request = test_client.request("GET", "/btaylor", {
"host":"graph.facebook.com"
});
facebook_request.on('response',function(facebook_response){
facebook_response.on('data',function(chunk){
console.log(chunk);
});
facebook_response.on('end', function() {
console.log("DONE");
});
});
facebook_request.end();
});
Esto parece bastante sencillo, pero bloquea el servidor cada vez que visito el servidor/prueba.
Sé que estoy presionando el código correcto, porque si elimino, por ejemplo, la línea "var http = ...", obtendré un "http no definido" ya que trata de ejecutar http.createClient.
Solución
Utilizar el https
Módulo para Node.js para conectarse a sitios web HTTPS. La forma en que lo hace es demasiado complicado para los datos simples de solicitud.
var express = require("express");
var app = express.createServer();
app.get('/test', function(request, response) {
var https = require('https');
response.writeHead(200);
https.get({ host: 'graph.facebook.com', path: '/btaylor' }, function (res) {
console.log(res);
response.end(res.body);
});
});
app.listen(process.env.PORT);
También puede considerar usar solicitud.