我需要能够在我的请求代理应用程序中使用http请求主体,然后再在实际的Web服务中使用。我正在使用restreamer来重置'流(甚至自己写中间件没有变化)。 Web服务接收正常,但由于结束从未发出,我无法继续请求。
使用邮递员进行测试,发送原始正文,并设置内容类型。任何建议将不胜感激。谢谢!
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 :(得分: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与包含相同消息的文件一起使用时,它将不起作用:
curl -X POST -d @data.json http://localhost:8000 --header "Content-Type:application/json"
我将请求对象相互比较并发现了一些差异,当我到达内容长度的请求标头时,我发现编辑它的“正确”长度将结束蒸汽(并且Web服务器将发送回应)。
我将进行所需的修改并提交connect-restreamer模块。