2014-11-12 2 views
0

Мне нужно иметь возможность использовать тело запроса http в моем прокси-приложении запроса, а затем снова в фактической веб-службе. Я использую restreamer для «сброса» потока (и даже сам написал промежуточное программное обеспечение без изменений). Веб-служба получает тело просто отлично, но поскольку конец никогда не испускается, я не могу продолжить запрос.http-запрос не испускает «конец» после прокси

Тестирование с почтальоном, отправка сырого тела, с типом контента. Любые предложения будут ценны. Благодаря!

var express = require('express') 
    , bodyParser = require('body-parser') 
    , http = require('http') 
    , restreamer = require('connect-restreamer') 
    , httpProxy = require('http-proxy') 

var app = express(); 

app.use(function (req, res, next) { 
    var body = ''; 
    req.on('data', function (chunk) { 
     body += chunk.toString('utf8'); 

    }); 
    req.on('end', function (chunk) { 
     req.body = JSON.parse(body) 
     next(); 
    }); 
}); 

app.use(restreamer()); 

var proxy = httpProxy.createServer(); 

app.all('*', function (req, res) { 
    proxy.web(req, res, { 
     target: 'http://localhost:8001' 
    }); 
}); 

http.createServer(app).listen(8000); 

app2 = express(); 

app2.use(function (req, res, next) { 
    var body = ''; 
    req.on('data', function (chunk) { 
     body += chunk.toString('utf8'); 

    }); 
    req.on('end', function (chunk) { 
     req.body = JSON.parse(body) 
     next(); 
    }); 
}); 

app2.all('*', function (req, res) { 
    res.send(req.body) 
}); 

http.createServer(app2).listen(8001); 
+0

Также проверено с помощью curl: 'curl -X POST -d @ data.json http: // localhost: 8000 --header« Content-Type: application/json »' – ngourley

ответ

0

Использование библиотеки запрос в моем приложении, он работал:

var request = require('request') 
request.post({ 
    url: 'http://localhost:8000', 
    json: {content: 123, type: "greeting", access_token: "here i am"} 
},function(err, res,data){ 
    console.log('return:' ,err, data) 
}); 

Но использование локон с файлом, содержащим такое же сообщение, он не будет работать:

curl -X POST -d @data.json http://localhost:8000 --header "Content-Type:application/json" 

Я сравнил объекты запроса друг против друга и обнаружили несколько отличий, и когда я попал в заголовок запроса для длины контента, я обнаружил, что его редактирование «правильная» длина закончит пар (и веб-сервер отправит ar esponse).

Я внесу необходимые изменения и передам модуль connect-restreamer.