NodeJsシンプルで使いやすいローカルエージェントサーバの構築


node-proxy-server
引用する
純粋なフロントエンド開発の場合、多くのビジネスシーンではローカルサーバを構築し、ページの閲覧を容易にする必要があります.いくつかのメリットを簡単に列挙します.
  • ローカルエリアネットワーク内のマルチターミナルアクセス
  • 外部ネットワークマッピング
  • と連携
  • インタフェースのドメイン間問題を解決する
  • 私がよく使ういくつかのローカルサーバの構築方法は、例えば
    npmのserve package
  • グローバルインストール、serve ./起動、便利で使いやすい.
  • が直接起動すると、ドメイン間ではサポートされません.

  • webpack-dev-server
  • は一般的にwepackベースのプロジェクトで使用され、一般的なH 5構築にはコストがかかる.
  • はドメイン間でサポートされています.

  • node-proxy-serverリンク
  • は通常のページ開発に適しており、構成が簡単で、nodeコマンドが起動します.
  • はドメイン間でサポートされています.

  • Node-proxy-server原理
    コンフィギュレーション
    インタフェースアドレスのブロック、およびエージェントインタフェースのアドレスを構成します.
    let conifg = {
         
        '/xxxx1': {
          //            
            target: 'http://xxxxxxxx.com', //     
            port: 80, //   ,  80,       8080
        },
        '/xxxx2': {
          
            target: 'http://xxxxxxxx.com', 
            port: 80,
        }
        // ...other path
    };
    

    ミドルエージェントサーバ
    主にnodejsのhttpとfsモジュールを利用して、中間サーバを作成し、ページ要求を受け入れ、中間サーバを通じて実際のインタフェースを要求し、データを返します.
    let http = require('http');
    let fs = require('fs');
    //        http  
    let app = http.createServer(function (request, response) {
         });
    

    要求をブロックして転送する
    構成で設定されたブロックパスに従って、要求をブロックし、実際のアドレスに転送する.
    //           
    function hasProxy(url, request, response) {
         
        for (const key in conifg) {
          //           
            const {
          target, port } = conifg[key];
            let info = target.split('//');
            let opts = {
          //     
                protocol: info[0],
                host: info[1],
                port: port || 80,
                method: request.method,
                path: url,
                json: true,
                headers: {
         }
            }
            proxy(opts, request, response);
            return true;
        }
        return false;
    }
    
    //     
    function proxy(opts, request, response) {
         
        //         
        var proxyRequest = http.request(opts, function (proxyResponse) {
         
            //         ,    response
            proxyResponse.on('data', function (chunk) {
         
                response.write(chunk, 'binary');
            });
            //       ,    response  
            proxyResponse.on('end', function () {
         
                response.end();
            });
            response.writeHead(proxyResponse.statusCode, proxyResponse.headers);
        });
    
        //         ,        
        request.on('data', function (chunk) {
         
            proxyRequest.write(chunk, 'binary');
        });
    
        //       ,          
        request.on('end', function () {
         
            proxyRequest.end();
        });
    }
    

    一般リソースリクエスト
    ブロック要求ではなく、直接通過します.
    //          
    fs.readFile(__dirname + url, function (err, data) {
         
        if (err) {
         
            console.log('    ', err);
        } else {
         
            response.end(data);
        }
    });
    

    ソースコード
    完全なコード、ご自身を歓迎します.