Pas de réponse à l'aide d'exprimer proxy itinéraire
J'ai écrit un petit proxy avec nodejs, d'exprimer et de htt-proxy. Il fonctionne bien pour servir des fichiers locaux, mais ne parvient pas quand il s'agit de proxy pour api externe:
var express = require('express'),
app = express.createServer(),
httpProxy = require('http-proxy');
app.use(express.bodyParser());
app.listen(process.env.PORT || 1235);
var proxy = new httpProxy.RoutingProxy();
app.get('/', function(req, res) {
res.sendfile(__dirname + '/index.html');
});
app.get('/js/*', function(req, res) {
res.sendfile(__dirname + req.url);
});
app.get('/css/*', function(req, res) {
res.sendfile(__dirname + req.url);
});
app.all('/*', function(req, res) {
req.url = 'v1/public/yql?q=show%20tables&format=json&callback=';
proxy.proxyRequest(req, res, {
host: 'query.yahooapis.com', //yahoo is just an example to verify its not the apis fault
port: 8080
});
});
Le problème est qu'il n'y a pas de réponse de l'api yahoo, peut-être qu'il n'y est une réponse, mais je n'ai pas venu dans le navigateur.
Vous devez vous connecter pour publier un commentaire.
Encore plus simple avec
pipe
etrequest
-PaquetIl transfère la totalité de la requête à l'API et les tuyaux de la réponse au demandeur. Cette traite aussi de POST/PUT/DELETE et toutes les autres demandes \o/
Si vous aussi vous soucier de la chaîne de requête, vous devriez tube ainsi
req.pipe(request(url)).pipe(res);
? Pourquoi sont deuxpipe
s nécessaire?pipe
ligne se bloque lorsque les requêtes json content-type - voir cette questionrequest(url).pipe(res);
que > propose icirequest(url).pipe(res);
finira par le faire, mais vous perdriez toute demande d'informations spécifiques à l'exception de l'URL. Mon projet est d'abord la tuyauterie de l'ensemble de la requête à l'API et de la tuyauterie de la réponse au demandeur. C'est pourquoi les deux tuyaux sont en train d'arriver.req.pipe(request({url:url, qs: {foo: 'bar'}})).pipe(res);
mais je n'ai pas vérifiéhost
en-tête de très important.req.pipe(request({ qs:req.query, uri: db_url })).pipe(res);
json: true
àrequest
paramètres, de sorte qu'il devient:req.pipe(request({ qs:req.query, uri: url, json: true })).pipe(res);
Peut-être que votre code est différent quand vous faites des tests, mais je suis interrogeant la même URL, comme dans l'exemple de code utilisant les éléments suivants:
http://query.yahooapis.com:8080/v1/public/yql?q=show%20tables&format=json&callback=
et je ne reçois rien en retour. Ma conjecture est que vous voulez changer le port 80 (à partir de 8080) -- il fonctionne quand je le change comme suit:
http://query.yahooapis.com:80/v1/public/yql?q=show%20tables&format=json&callback=
Donc, cela signifie qu'il doit être:
Peut-être-je utiliser http-proxy dans un mauvais sens. À l'aide de restler fait ce que je veux:
J'ai fini par utiliser http-proxy-middleware.
Le code ressemble à ceci: