2014-10-29 14 views
15

sto lavorando in Node.js progetto e voglio nodo di agire come un proxy per solrSocket hangup durante la pubblicazione richiesta al nodo-http-proxy Node.js

per Proxy: ho usato Node-http-proxy. il problema è che il lavoro di proxy eccellente nel caso di richieste GET, ma in caso di richieste POST si traduce in presa riagganciare eccezione

Ecco un esempio del mio codice nodo

var express = require('express'); 
var router = express.Router(); 

var http = require('http'); 
var httpProxy = require('http-proxy') 

var proxyOptions = { 
    host: "127.0.0.1", 
    port: 8983 
}; 
var proxy = httpProxy.createProxyServer(proxyOptions); 

// It works excellent in GET request 
router.get('/solr/*', function(req, res) { 
    proxy.web(req, res, { 
    target: 'http://' + proxyOptions.host + ':' + proxyOptions.port 
    }); 
}) 

// the socket hang up in post request 
router.post('/solr/*', function(req, res) { 
    console.log('Post Request'); 
    proxy.web(req, res, { 
    target: 'http://' + proxyOptions.host + ':' + proxyOptions.port 
    }); 
}) 

E questo è l'errore dopo qualche tempo in consolle nodo

Error: socket hang up 
    at createHangUpError (http.js:1476:15) 
    at Socket.socketOnEnd [as onend] (http.js:1572:23) 
    at Socket.g (events.js:180:16) 
    at Socket.emit (events.js:117:20) 
    at _stream_readable.js:943:16 
    at process._tickCallback (node.js:419:13) 

Eventuali suggerimenti circa la causa del problema

+1

https://github.com/nodejitsu/node-http-proxy/issues/180#issuecomment-12244852 sembra di fare qualcosa con usando espresso – alandarev

risposta

13

credo che il problema deriva dal o der del middleware. Usando bodyParser prima che httpProxy interrompa le richieste con il corpo JSON, è necessario utilizzare httpProxy prima di bodyParser.

È possibile controllare this per ulteriori informazioni su bodyParser.

+4

Che cosa succede se non riesco a usarlo prima di middleware? Il mio proxy è condizionale e dipende dai middleware ... – oleynikd

5

ho trovato la soluzione a questo problema con l'aiuto di questo problema https://github.com/nodejitsu/node-http-proxy/issues/180#issuecomment-12244852

la soluzione è quella di utilizzare il middleware per il proxy prima di utilizzare il bodyparser

esempio di codice

// use middleware first 
app.post('/solr/*',function(req, res) { 
    console.log('POST REQUEST') 
    //res.end(); 
    proxy.web(req, res, { 
    target: 'http://' + proxyOptions.host + ':' + proxyOptions.port 
    }); 
}) 
app.use(logger('dev')); 
// use bodyparser after that 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
9

Utilizzare un callback per ascoltare l'errore:

proxy.web(req, res, { target: 'http://mytarget.com:8080' }, function(e) { ... }); 

da https://github.com/nodejitsu/node-http-proxy

+0

aggiungendo questo callback si impedirà all'intero server di bloccarsi +1 –

Problemi correlati