効率至上のnodejs手動実装サーバ

5902 ワード

これは連続的なnode学習ノートで、本文は第1章で、持続的に更新して、持続的に完備します
  • python使いやすくて、長く使うと人の気性を養うことができて、nodejsは使いにくいですが、効率がよくて、あなたの悪い気性を徹底的に治すことができます
  • nodejsのコールバックは私が使った最も卵の痛いプログラミング方式の一つですが、十分に巧みで、nodeをマスターして、プログラマーにとって、安定して損をしない商売でもあります.
  • くだらない話は多く言わないで、上のコード
  • 1.環境の構築を完了し、正則を実行し、文字列の数字を抽出する
    let numRe = /\d+/g;
    console.log("123dsgfas 12434 sdfasdf234dagsdfg".match(numRe));
    

    Nodejsの構文はブラウザjsの構文に非常に近いので、nodeをインストールした後、正則を書いて、環境がインストールに成功したかどうかをテストすることができます.atomのscriptプラグインを通じてポートが占有されやすいので、学習中にコマンドラインツールでnodeスクリプトを実行することをお勧めします.node HelloWorld.js
    2.httpモジュールがサービスを開始
    const http = require("http")
    //      8080       
    http.createServer(function(req, res){
      console.log("==>", req.url);
      if (req.url === "/1.html"){
        res.write("you have request 1.html");
      }else if (req.url === "/2.html") {
        res.write("you have request 2.html");
      }else{
        res.write("404(page not found)");
      }
      res.end();
    }).listen(8080)
    
    

    サービスを開始し、3つのステップに分けます.
  • 第1ステップ:モジュール
  • を導入する
  • 第2ステップ:呼び出しモジュールhttp.createServer
  • 第3歩:ポートhttpを傍受する.createServer(function(req, res){}).listen(8080)

  • 3.fsモジュール読み書きファイル
    const fs = require("fs");
    //     
    fs.writeFile("HelloWorld.txt", "HelloWorld HelloNode", function(err){
      if(err){
        console.log(err);
      }
      //          
      else{
        fs.readFile("HelloWorld.txt", function(err, data) {
          if(err){
            console.log(err);
          }else{
            console.log(data.toString());
          }
        })
      }
    })
    

    ファイルを簡単に読み書きするのはとても簡単で、他のプログラミング言語と似ていて、呼び出し方法を暗記すればいいです.
    4.静的httpサーバの実装
    const http = require("http");
    const fs = require("fs")
    
    
    http.createServer(function(req, res){
      //    www/       
      fs.readFile("./www/"+req.url, function(err, data) {
        if(err){
          console.log(err);
          res.write("404");
          res.end();
        }else{
          console.log(data.toString())
          res.write(data);
          res.end();
        }
      })
    
    }).listen(8080)
    
    www/ディレクトリのファイルを読み込むことで、静的リソースサーバを実現
    5.getデータの取得
    const http = require("http");
    const url = require("url");
    
    http.createServer(function(req, res){
      let reqObj = url.parse(req.url, true)
      let urlPath = reqObj.path;
      let urlData = reqObj.query;
      let log = "==>urlPath:" + urlPath +"==>>urlData:"+ JSON.stringify(urlData);
      console.log(log);
      res.write(log);
      res.end();
    }).listen(6060)
    

    getリクエストのパラメータの解析
    6.postデータの取得
    const http = require("http");
    const querystring = require("querystring");
    
    http.createServer(function(req, res){
      let dataStr = '';
      let i = 0;
      req.on("data", function(data){
        dataStr+=data;
        console.log(` ${i++}     `);
      })
    
      req.on("end", function(){
        console.log("end");
        let parseData = querystring.parse(dataStr);
        console.log("parseData:", parseData);
        res.write(new Buffer(dataStr, "utf8"));
        res.end();
      })
    
    }).listen(8800)
    

    postリクエストのパラメータの解析
    まとめ:既存の知識で簡単なサーバプログラムを実現
    const http = require("http");
    const fs = require("fs");
    const querystring = require("querystring");
    
    /*
    *1.   www      
    *2.   get  ,     serverLog.txt
    *3.   post  serverLog.txt
    */
    
    //       
    function getNowDate(){
        let dt = new Date();
    
        let year = dt.getFullYear();
        let month = dt.getMonth();
        let day = dt.getDate();
        //     1
        month = month + 1;
        //         
        if (month <= 9){
            month = "0" + month;
        }
    
        //        
        if (day <= 9){
            day = "0" + day;
        }
    
        let hour = dt.getHours();
        let minutes = dt.getMinutes();
        let seconds = dt.getSeconds();
    
    
        return year+"-"+month+"-"+day+"-"+hour+"-"+minutes+"-"+seconds;
    }
    
    http.createServer(function(req, res){
      // 1.     www      
      fs.readFile("./www"+req.url, function(err, data){
        if(err){
          //2.        ,     log
          if(req.method === "GET"){
            console.log("   GET  ")
            let getData = querystring.parse(req.url.split("?")[1]);
            console.log("   get   ==>",getData);
            fs.writeFile("./serverLog.txt", getNowDate()+"
    "+JSON.stringify(getData)+"
    ", {flag: 'a'},function(err){ if(err){ console.log(err); console.log("GET log "); } }); }else if (req.method == "POST") { console.log(" POST ") let tmpData = '' req.on("data", function(data){ tmpData+=data; }); req.on("end", function(){ let postData = querystring.parse(tmpData); console.log(" post ==>", postData); fs.writeFile("./serverLog.txt",getNowDate()+"
    "+JSON.stringify(postData)+"
    ", {flag: 'a'},function(err){ if(err){ console.log(err); console.log("POST log "); } }); }) } res.write("404"); res.end(); }else{ res.write(data); res.end(); } }) }).listen(8000)
  • pythonテストスクリプト
  • import requests
    
    requests.get("http://127.0.0.1:8000/?name=zhaozhao&age=18&method=GET")
    
    requests.post("http://127.0.0.1:8000", data={"name": "zhaozhao", "age": 18, "method": "POST"})
    

    Nodejsコールバックメカニズムを熟知しており、オリジナルのnodejsでサーバープログラムを書くのは効率的なことです.テストスクリプトはrequestsが使いやすいです.