How to redirect incoming URL requests by adding additional parameters

后端 未结 3 521
慢半拍i
慢半拍i 2021-01-14 18:56

Problem: I get an incoming HTTP request to my server application. The request is something like this : http://example.com?id=abc. I need to parse this request, patch additio

相关标签:
3条回答
  • 2021-01-14 19:12

    Just wondering if a simpler redirect would serve the purpose:

      function onRequest(request,response) {
        if(request.method =='GET') {
           sys.debug("in get");
           var pathName = url.parse(request.url).pathname;
           sys.debug("Get PathName" + pathName + ":" + request.url);
           var myidArr = request.url.split("=");
           var myid = myidArr[1];
           var path = 'http://localhost:8080/temp.html?id=' + myid + '&name=cdf';
           response.writeHead(302, {'Location': path});
           response.end();
        }
    
    0 讨论(0)
  • 2021-01-14 19:25

    You have to pass the original response to your redirectUrl function, and let it write to the response. Something like:

    function redirectUrl(myid, response) {
      var options = {
        host: 'localhost',
        port: 8080,
        path: '/temp.html?id=' + myid + '&name=cdf',
        method: 'GET'
      };
      var req = http.request(options, function(res) {
        console.log('STATUS: ' + res.statusCode);
        console.log('HEADERS: ' + JSON.stringify(res.headers));
        res.setEncoding('utf8');
    
        // Proxy the headers
        response.writeHead(res.statusCode, res.headers);
    
        // Proxy the response
        res.on('data', function (chunk) {
          response.write(chunk);
        });
        res.on('end', function(){
            response.end();
          });
        });
      req.end();
    }
    

    Calling it:

    redirectUrl(myid, response);
    

    Also, since you're already parsing the url, why not do:

    var parsedUrl = url.parse(request.url, true);
    sys.debug("Get PathName" + parsedUrl.pathname + ":" + request.url);
    //Call the redirect function
    redirectUrl(parsedUrl.query.id, response);
    
    0 讨论(0)
  • 2021-01-14 19:36

    This is a classical error when coming to the async world. You don't return the value of the file, you pass a callback as a parameter and execute it with the end value like so:

    function proxyUrl(id, cb) {
      http.request(options, function(res) {
        // do stuff
        res.on('data', function (chunk) {
          temp = temp.concat(chunk);
        });
        res.on('end', function(){
          // instead of return you are using a callback function
          cb(temp);
        });
    }
    
    function onRequest(req, res) {
      // do stuff
      proxyUrl(id, function(htmlContent) {
        // you can write the htmlContent using req.end here
      });
    }
    
    http.createServer(onRequest).listen(8888);
    
    0 讨论(0)
提交回复
热议问题