2014-10-29 13 views
15

Tôi đang làm việc trong dự án Node.js và tôi muốn nút để hoạt động như một proxy cho SolrỔ cắm gác máy khi đăng yêu cầu đến Node-http-proxy Node.js

Đối với proxy: Tôi đã từng Node-http-proxy. vấn đề là ủy nhiệm công việc tuyệt vời trong trường hợp yêu cầu get nhưng trong trường hợp của bài yêu cầu nó kết quả trong ổ cắm ngắt kết nối ngoại lệ

Đây là một mẫu mã nút của tôi

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

Và đây là lỗi sau một thời gian ở nút điều khiển

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) 

Mọi góp ý về nguyên nhân của vấn đề

+1

https://github.com/nodejitsu/node-http-proxy/issues/180#issuecomment-12244852 dường như làm điều gì đó với việc sử dụng express – alandarev

Trả lời

13

tôi nghĩ vấn đề xuất phát từ hoặc der của middleware. Sử dụng bodyParser trước httpProxy sẽ phá vỡ các yêu cầu với phần thân JSON, vì vậy httpProxy nên được sử dụng trước bodyParser.

Bạn có thể muốn kiểm tra this để biết thêm thông tin về bodyParser.

+4

Nếu tôi không thể sử dụng nó trước phần giữa? Proxy của tôi là có điều kiện và phụ thuộc vào middlewares ... – oleynikd

5

tôi tìm thấy giải pháp cho vấn đề này với sự giúp đỡ về vấn đề này https://github.com/nodejitsu/node-http-proxy/issues/180#issuecomment-12244852

giải pháp là sử dụng middleware cho proxy trước khi sử dụng bodyparser

mẫu mã

// 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

Dùng gọi lại để nghe lỗi:

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

từ https://github.com/nodejitsu/node-http-proxy

+0

thêm gọi lại này sẽ ngăn chặn toàn bộ máy chủ bị rơi +1 –

Các vấn đề liên quan