Node(v6.5.0 Documentation)--HTTP

HTTP

摘要:1、最近今天三四天都在看Nodejs裏面的HTTP這個模塊,從官方文檔到翻譯的中文版本(英文文檔雖然對我來說有點難度,但是要堅持,然後在看中文文檔,在返過來看英文文檔,爲的就是提高英文技術文檔的閱讀能力,誰讓好的氛圍都是用英語交流呢?);
2、原來做demo的時候,只是引用http、express模塊,然後監聽“端口”,“主機名”;然後啓動Node,在瀏覽器上輸入URL;就算放到服務器上面running了;當時以爲這就是Node,現在想想真臉紅;主要是先入爲主的原因,以爲能在服務器上跑了,能操作mySql就算是會了Node;express-主要是解決了請求路由和視圖模板,參考文章:
http://www.cnblogs.com/hyddd/p/4237099.html
做demo時候的理解:
這裏寫圖片描述
這麼看也沒有錯,用了express框架後,感覺很簡單;但是更多的操作就沒有了,比如說文件的上傳,解析,等等……;後面我會繼續學習,記日誌,做demo;
nodejs–http.js

'use strict';
exports.IncomingMessage = require('_http_incoming').IncomingMessage;

exports.OutgoingMessage = require('_http_outgoing').OutgoingMessage;

exports.METHODS = require('_http_common').methods.slice().sort();

const agent = require('_http_agent');
exports.Agent = agent.Agent;
exports.globalAgent = agent.globalAgent;

const server = require('_http_server');
exports.ServerResponse = server.ServerResponse;
exports.STATUS_CODES = server.STATUS_CODES;
exports._connectionListener = server._connectionListener;
const Server = exports.Server = server.Server;

exports.createServer = function(requestListener) {
  return new Server(requestListener);
};

const client = require('_http_client');
const ClientRequest = exports.ClientRequest = client.ClientRequest;

exports.request = function(options, cb) {
  return new ClientRequest(options, cb);
};

exports.get = function(options, cb) {
  var req = exports.request(options, cb);
  req.end();
  return req;
};
  1. 引用http.js模塊:const http = require(“http”);(這裏不講解requirejs的用法,基礎知識自行了解這裏的“http”應該是路徑下面的httpjs文件)
    1. 上面的代碼段就是http的模塊,exports對象下面的方法都可以調用,相當於是const http = exports[“索引值”];這樣定義的http就具有了這個模塊中exports對象下面的所有方法,屬性了;真心的方便;
    2. 上面代碼段中凡是涉及 const XX = require(“XX”);你都可以去查找到源碼,(上github.com中搜索node-找到最多關注的git庫,裏面就是源碼;查找文件可以按鍵盤上的“t”鍵搜索);
      這裏寫圖片描述
      這裏寫圖片描述
  2. 上面的簡單用法,以及源碼在哪裏已經交代了,後面就不提及了,下面簡單的用http模塊創建一個服務;http.createServer()
 `const server = require('_http_server');
     exports.createServer = function(requestListener) {
      return new Server(requestListener);
    };`//返回了一個實例化的 Server()方法;

//===========================demo
 const server = http.createServer((req, res) => {
     res.writeHead(200, {'Content-Type': 'text/plain'})
     res.end("hello");
 });

 server.listen(8000,"127.0.0.1");
  1. //啓動Node,然後在瀏覽器上啓動127.0.0.1:8000;就可以看到”hello”,這裏的res.end();是響應後關閉,不然前端一直會請求,後臺的響應到不了前端;看圖對比
  2. 這裏寫圖片描述
  3. 這裏寫圖片描述
  4. 從圖上我們可以清晰的看到,res.end();後-響應返回(關閉響應的那張圖),具有完整的信息;
  5. 對請求的鏈接做條件判斷,自己動動手輸入,看看;
const server = http.createServer((req, res) => {
    if(req.url == "/"){
        console.log(req.method);//GET
        res.writeHead(200, {'Content-Type': 'text/plain'})
         res.end("hello");
    }else if(req.url == "/index"){
        res.writeHead(200, {'Content-Type': 'text/plain'})
         res.end("hello index");
         //http://127.0.0.1:8000/index
    }else{
        res.writeHead(404, {'Content-Type': 'text/plain'})
         res.end("404 Not Found");
    }

 });

 server.listen(8000,"127.0.0.1");
 6. 如果要區別對待Http method,可以根據 request.method 判斷(看上面req.method)。至此,Http module在此場景下的短板顯露無疑。這個時候express模塊就很好了,有興趣的自己看,後面有時間會看看源碼,做做demo;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章