HTTP重定向的发布方法在Node.js中不起作用

时间:2018-07-23 18:43:13

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

Post with follow redirect enabled

Post with simple http request

嗨,我有一个简单的基于expressjs的服务器,它充当代理。  它根据传入的请求执行一个新的http请求,并在获得响应后将其发送回原始请求。以下代码可以正常工作,但是当响应包含 statusCode 301和statusMessage永久移动时,它将失败。 我尝试使用follow-redirects,但这似乎随后将我的发布请求转换为get请求。 下面是我的代码

    "use strict";
var express = require("express");
var app = express();
const http = require("http");
var bodyParser = require("body-parser");
var followRedirects = require('follow-redirects');
app.use(bodyParser.json());


  function pipeResponse (source, sink) {

    console.log("***********Response ***************");

    console.log("->>statusCode "+source.statusCode);
    console.log("->>statusMessage "+source.statusMessage);

    sink.statusCode = source.statusCode;
    sink.statusMessage = source.statusMessage;

    console.log("----------Response Headers ---------");

    Object.keys(source.headers).
        forEach((name) => {

            console.log(name+" : "+source.headers[name]);
            sink.setHeader(name, source.headers[name]);
        });
    console.log("-------------------------------------");   

    source.on("data", (ce) => {
        sink.write(ce);
        console.log("data  present" );
    });
    source.on("end", () => sink.end());

    console.log("**************************************");

}

// used to handle both query/read and modify operations on entityset people
app.all("/api/people", (req, res) => {

    // sample service 
    var options = {"headers": {}};
    options.host = "services.odata.org";
    options.path = "/TripPinRESTierService/(S(3mslpb2bc0k5ufk24olpghzx))/People";
    options.method = req.method;
    console.log("request method type " + req.method);

    if(req.headers["content-type"]){     
        options.headers["content-type"] = req.headers["content-type"];
    }

    var payLoad ;
    payLoad = req.body;
    //var proxyRequest = followRedirects.http.request(options, (backendres) => pipeResponse(backendres, res));
    var proxyRequest = http.request(options, (backendres) => pipeResponse(backendres, res));
    proxyRequest.on("error", (err) => {

        console.error("request failed",err);

    });
    if (payLoad) {
        console.log("payload data " + JSON.stringify(payLoad));
        proxyRequest.write(JSON.stringify(payLoad));
    }

    proxyRequest.end();


});

app.listen(8080, () => {
});

请问有什么身体可以帮助我解决这个问题。

帖子正文如下

{
    "UserName":"lewisblack",
    "FirstName":"Lewis",
    "LastName":"Black",
    "Emails":[
        "lewisblack@example.com"
    ],
    "AddressInfo": [
    {
      "Address": "187 Suffolk Ln.",
      "City": {
        "Name": "Boise",
        "CountryRegion": "United States",
        "Region": "ID"
      }
    }
    ]
}

0 个答案:

没有答案