NODEJS发送原始请求问题

时间:2018-02-05 12:23:10

标签: node.js proxy request

我有一个应用程序,我想用它作为代理。代码看起来像这样 我正在使用请求npm。

app.all('*', function(req, res){
 console.log(req.url); //lower case
 console.log(req.url.substr(0, 5));
 var alteredRequest;
 if (req.url.substr(0,5) == '/pro/') {

   var requestedURL = req.url.substr(5);
   console.log(requestedURL);
   if( (requestedURL.substr(0, 7) != 'http://') || (requestedURL.substr(0, 8) != 'https://') ){
     alteredRequest = "http://" + requestedURL;
   }
   request(alteredRequest, function(error, response, body){

     console.log('error: ', error); // Print the error if one occurred
     console.log('statusCode: ', response && response.statusCode); // Print the response status code if a response was received


     res.send(response);

   })
 }
})

当我在结束时调用res.send(response)时,我将响应作为正文,并且所有标题exc都被带到登录到屏幕的html主体。而不是那样,我想发送它作为一个真正的回应与所有标题和cookie。我该如何实现?谢谢你的帮助。

要进行更多演示,响应(来自google.com)就像这样开始,但它在屏幕上显示!不是真正的标题和statusCode:

{"statusCode":200,"body":"<!doctype html><html itemscope=\"\" itemtype=\"http://schema.org/WebPage\" lang=\"tr\"><head><meta content=\"text/html; charset=UTF-8\" http-equiv=\"Content-Type\"><meta content=\"/images/branding/googleg/1x/googleg_standard_color_128dp.png\" itemprop=\"image\"><title>Google</title><script nonce=\"fzz0lJtfXqp5SuC6mvodsw==\">(function(){window.google=

1 个答案:

答案 0 :(得分:0)

  1. 这是一种非常糟糕的重定向方式。你应该使用 res.redirect和req.protocol做到这一点
  2. if (req.url.substr(0,5) == '/pro/')也许是找到我见过的路线最可怕的方式。这是app.get('/', ...)的目的。
  3. 但是要回答你的问题,这是一个有效的例子

    &#13;
    &#13;
    const express = require("express");
    const request = require("request");
    const app = express();
    
    app.all('*', (req, res) => {
      const newUrl = 'http://www.google.com'; //replace with your url altering code
      return request(newUrl)
      .on('response', function(response) {
        console.log(response.statusCode) // 200
        console.log(response.headers['content-type']) 
      })
      .on('error', function(err) {
        console.log(err)
      })
      .pipe(res);
    });
    app.listen(9000);
    &#13;
    &#13;
    &#13;