http请求不会发出' end'代理后

时间:2014-11-12 01:52:53

标签: node.js express node-http-proxy

我需要能够在我的请求代理应用程序中使用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);

1 个答案:

答案 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模块。