全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解用node.js实现简单的反向代理

之前用node.js实现简单的反向代理,最近需要回顾,就顺便发到随笔上了

不多说直接上代码!

const http = require('http');
const url = require('url');
const querystring = require('querystring');


http.createServer(function(oreq, ores) {
  console.log("服务已开启");
  if (oreq) {
    if (oreq.url !== '/favicon.ico') {
      let content = '',
        postData = '';
      // 封装获取参数的方法
      function getParmas(oUrl) {
        let oQuery = (typeof oUrl === "object") ? oUrl : url.parse(oUrl, true).query,
          data = {};
        for (item in oQuery) {
          if (item !== 'hostname') {
            if (item !== 'path') {
              data[item] = oQuery[item];
            }
          }
        }
        return querystring.stringify(data);
      };
      // 封装发起http请求的方法
      function httpRequest(options, ores) {
        let datas = "";
        return http.request(options, function(res) {
          res.setEncoding('utf8');
          res.on('data', function(chunk) {
            // 返回数据
            datas += chunk;
          });
          res.on('end', function() {
            ores.writeHead(200, {
              "Content-Type": "application/json; charset = UTF-8",
              "Access-Control-Allow-Origin": "*"
            });
            ores.end(datas);
          })
        })
      };
      // 数据块接收中
      console.log(oreq.method.toUpperCase());
      if (oreq.method.toUpperCase() === "POST") {
        console.log("进入POST");
        oreq.on("data", function(postDataChunk) {
          postData += postDataChunk;
        });
        // 数据接收完毕,执行回调函数
        oreq.on("end", function() {
          console.log("接收完毕")
          console.log(postData);
            // 配置options
          let oData = JSON.parse(postData);

          postData = getParmas(oData);

          let options = {
            hostname: oData.hostname,
            port: '80',
            path: oData.path,
            method: "POST"
          };
          // 发送请求
          let req = httpRequest(options, ores);
          req.on('error', function(e) {
            console.log('problem with request: ' + e.message);
          });
          req.write(postData); //发送请求数据
          req.end();
        });

      } else {
        let queryObj = url.parse(oreq.url, true).query;
        content = getParmas(oreq.url);
        let options = {
          hostname: queryObj.hostname,
          port: '80',
          path: queryObj.path + content,
          method: "GET"
        };
        // 发送请求
        let req = httpRequest(options, ores);
        req.on('error', function(e) {
          console.log('problem with request: ' + e.message);
        });
        req.end();
      }
    }
  }
}).listen(8080, '127.0.0.1');

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# nodejs  # 反向代理  # 实现反向代理  # node  # 抛弃Nginx使用nodejs做反向代理服务器  # Node.js站点使用Nginx作反向代理时配置GZip压缩的教程  # 腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理服务器  # Linux安装NodeJs并配合Nginx实现反向代理  # 利用node.js实现反向代理的方法详解  # 上了  # 多说  # 回调  # 大家多多  # typeof  # object  # oQuery  # postData  # content  # oUrl  # getParmas  # path  # hostname  # stringify  # return  # item  # true  # parse  # data  # query 


相关文章: 如何通过虚拟主机快速完成网站搭建?  如何选择高效响应式自助建站源码系统?  代刷网站制作软件,别人代刷火车票靠谱吗?  学校为何禁止电信移动建设网站?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  内部网站制作流程,如何建立公司内部网站?  家庭服务器如何搭建个人网站?  TestNG的testng.xml配置文件怎么写  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  如何在Tomcat中配置并部署网站项目?  如何高效利用200m空间完成建站?  内网网站制作软件,内网的网站如何发布到外网?  如何在云主机上快速搭建网站?  相册网站制作软件,图片上的网址怎么复制?  导航网站建站方案与优化指南:一站式高效搭建技巧解析  如何选择域名并搭建高效网站?  教程网站设计制作软件,怎么创建自己的一个网站?  如何在自有机房高效搭建专业网站?  建站主机默认首页配置指南:核心功能与访问路径优化  如何用花生壳三步快速搭建专属网站?  香港服务器如何优化才能显著提升网站加载速度?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?  如何零基础开发自助建站系统?完整教程解析  成都网站制作公司哪家好,四川省职工服务网是做什么用?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  如何在阿里云域名上完成建站全流程?  如何用IIS7快速搭建并优化网站站点?  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  建站主机系统SEO优化与智能配置核心关键词操作指南  如何在景安云服务器上绑定域名并配置虚拟主机?  如何通过智能用户系统一键生成高效建站方案?  如何通过VPS建站无需域名直接访问?  制作门户网站的参考文献在哪,小说网站怎么建立?  建站之星logo尺寸如何设置最合适?  香港服务器租用费用高吗?如何避免常见误区?  c# 服务器GC和工作站GC的区别和设置  ,交易猫的商品怎么发布到网站上去?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  如何快速搭建高效简练网站?  建站之星如何实现五合一智能建站与营销推广?  如何挑选优质建站一级代理提升网站排名?  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  湖北网站制作公司有哪些,湖北清能集团官网?  如何在IIS7中新建站点?详细步骤解析  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  XML的“混合内容”是什么 怎么用DTD或XSD定义  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。