亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解用node.js實(shí)現(xiàn)簡(jiǎn)單的反向代理

 更新時(shí)間:2017年06月26日 11:52:11   作者:JUN_API  
本篇文章主要介紹了詳解用node.js實(shí)現(xiàn)簡(jiǎn)單的反向代理,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

之前用node.js實(shí)現(xiàn)簡(jiǎn)單的反向代理,最近需要回顧,就順便發(fā)到隨筆上了

不多說(shuō)直接上代碼!

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


http.createServer(function(oreq, ores) {
  console.log("服務(wù)已開(kāi)啟");
  if (oreq) {
    if (oreq.url !== '/favicon.ico') {
      let content = '',
        postData = '';
      // 封裝獲取參數(shù)的方法
      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);
      };
      // 封裝發(fā)起http請(qǐng)求的方法
      function httpRequest(options, ores) {
        let datas = "";
        return http.request(options, function(res) {
          res.setEncoding('utf8');
          res.on('data', function(chunk) {
            // 返回?cái)?shù)據(jù)
            datas += chunk;
          });
          res.on('end', function() {
            ores.writeHead(200, {
              "Content-Type": "application/json; charset = UTF-8",
              "Access-Control-Allow-Origin": "*"
            });
            ores.end(datas);
          })
        })
      };
      // 數(shù)據(jù)塊接收中
      console.log(oreq.method.toUpperCase());
      if (oreq.method.toUpperCase() === "POST") {
        console.log("進(jìn)入POST");
        oreq.on("data", function(postDataChunk) {
          postData += postDataChunk;
        });
        // 數(shù)據(jù)接收完畢,執(zhí)行回調(diào)函數(shù)
        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"
          };
          // 發(fā)送請(qǐng)求
          let req = httpRequest(options, ores);
          req.on('error', function(e) {
            console.log('problem with request: ' + e.message);
          });
          req.write(postData); //發(fā)送請(qǐng)求數(shù)據(jù)
          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"
        };
        // 發(fā)送請(qǐng)求
        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');

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • node作為中間服務(wù)層如何發(fā)送請(qǐng)求(發(fā)送請(qǐng)求的實(shí)現(xiàn)方法詳解)

    node作為中間服務(wù)層如何發(fā)送請(qǐng)求(發(fā)送請(qǐng)求的實(shí)現(xiàn)方法詳解)

    node作為中間服務(wù)層如何發(fā)送請(qǐng)求?下面小編就為大家分享一下發(fā)送請(qǐng)求的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助
    2018-01-01
  • node.js中module.exports與exports用法上的區(qū)別

    node.js中module.exports與exports用法上的區(qū)別

    Node.js 引入了模塊(Module)概念,一個(gè)模塊可以通過(guò)module.exports 或 exports 將函數(shù)、變量等導(dǎo)出,以使其它 JavaScript 腳本通過(guò)require() 函數(shù)引入并使用。那么node.js中module.exports與exports有什么區(qū)別呢?下面小編給大家解答下
    2016-09-09
  • nodejs入門(mén)教程二:創(chuàng)建一個(gè)簡(jiǎn)單應(yīng)用示例

    nodejs入門(mén)教程二:創(chuàng)建一個(gè)簡(jiǎn)單應(yīng)用示例

    這篇文章主要介紹了nodejs入門(mén)教程之創(chuàng)建一個(gè)簡(jiǎn)單應(yīng)用的方法,涉及nodejs http模塊的引用、端口監(jiān)聽(tīng)等相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04
  • NodeJS?GRPC?多個(gè)?.proto?文件的處理步驟

    NodeJS?GRPC?多個(gè)?.proto?文件的處理步驟

    本文教程詳細(xì)介紹了在NodeJS環(huán)境中如何使用gRPC框架處理多個(gè).proto文件,步驟包括安裝依賴、定義.proto文件、生成gRPC代碼、實(shí)現(xiàn)服務(wù)器和客戶端以及運(yùn)行,適用于開(kāi)發(fā)者在構(gòu)建分布式應(yīng)用時(shí)進(jìn)行接口定義和服務(wù)實(shí)現(xiàn)
    2024-10-10
  • node運(yùn)行js獲得輸出的三種方式示例詳解

    node運(yùn)行js獲得輸出的三種方式示例詳解

    這篇文章主要介紹了node運(yùn)行js獲得輸出的三種方式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Npm?Module作用及使用一文全解

    Npm?Module作用及使用一文全解

    這篇文章主要介紹了Npm?Module作用及使用一文全解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • node.js中的forEach()是同步還是異步呢

    node.js中的forEach()是同步還是異步呢

    這篇文章主要討論并驗(yàn)證了node.js中的forEach()是同步還是異步,思路和方法分享給大家,有需要的小伙伴可以參考下。
    2015-01-01
  • 解決Nodejs全局安裝模塊后找不到命令的問(wèn)題

    解決Nodejs全局安裝模塊后找不到命令的問(wèn)題

    今天小編就為大家分享一篇解決Nodejs全局安裝模塊后找不到命令的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • nest.js,egg.js,midway,express,koa的區(qū)別小結(jié)

    nest.js,egg.js,midway,express,koa的區(qū)別小結(jié)

    本文主要介紹了nest.js,egg.js,midway,express,koa的區(qū)別小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 總結(jié)Node.js中9種fs模塊文件操作方法(文件夾遞歸刪除知識(shí))

    總結(jié)Node.js中9種fs模塊文件操作方法(文件夾遞歸刪除知識(shí))

    這篇文章主要介紹了總結(jié)Node.js中9種fs模塊文件操作方法(文件夾遞歸刪除知識(shí)),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07

最新評(píng)論