【Web全棧課程6】nodejs模塊簡介

node基礎

官網:http://nodesjs.orgjavascript

Node
前臺JS能用的東西,後臺都能用,只是Node裏面不涉及樣式層,不關注html、css;node提供了不少模塊css

  1. 開發相對小規模的web後臺、中間層,沒法取代java,java高併發的各類特性node沒法替代
  2. 工具
    測試、構建(grunt、glup、WebPack……)、抓取

本地啓動一個node服務器

  1. 實現一個簡單的server.js文件:html

    const http = require('http');
    // 建立服務器,獲得一個服務器對象;每當有請求到這個服務器,都會回調這個方法
    let server = http.createServer((request,response)=>{
        console.log('node server recive message.');
        // 根據請求返回不一樣的內容
        switch (request.url) {
            case  '/aaa':
                response.write('abc');
                break;
            case  '/1.html':
                response.write('<html><head></head><body>this is 1.html</body></html>');
                break;
        }
        response.end();
    });
    // 開啓HTTP服務器監聽鏈接
    server.listen(3000);
  2. 運行NodeJS程序:
    進入到js文件所在的目錄,執行: node server.js
  3. 當咱們訪問監聽的接口時(如上代碼監聽的是3000,訪問localhost:3000,能夠看到server接收到了消息

clipboard.png
訪問http://localhost:3000/1.html時,返回響應的內容到前端。
image.png前端

Q: NodeJs能處理併發嗎?
NodeJs和Js同樣的單線程、單進程。NodeJs採用非阻塞的異步交互。java

Q:收到消息打印了2次?
咱們使用ie7瀏覽器,發現只打印了一次,也就是說高級瀏覽器打印了2次。
打開高級瀏覽器的開發者工具,能夠看到發送請求的時候,瀏覽器主動去請求了網站小圖標,這就是爲何有2條的緣由。
clipboard.pngnode

assert - 斷言

模塊提供了一組簡單的斷言測試,可用於測試不變量,不知足條件的時候程序直接中斷。
示例:web

const assert = require('assert');
function sum(a, b) {
    assert(arguments.length == 2, '必須傳2個參數');
    assert(typeof a == 'number', '第一個參數必須是數字');
    assert(typeof b == 'number', '第二個參數必須是數字');
}
console.log(sum(12));

image.png

Buffer - 緩衝器 & fs - 文件系統

Buffer:幫助處理二進制數據,用於在 TCP 流、文件系統操做、以及其餘上下文中與八位字節流進行交互。
fs:提供與文件系統進行交互的功能,雖然幾乎不使用同步,但任何一個操做同時提供了同步和異步。
讀文件示例:json

const fs = require('fs');
fs.readFile('1.txt', (err, data) => {
if (err){
    console.log('沒有找到文件。');
} else {
    console.log(data);
}})

文件1.txt存放內容: 12 15 18 20,能夠看到讀出來的data並非咱們要的數據,而是顯示成16進制的二進制流。
image.png後端

  1. 直接傳遞給前端是正常顯示的,由於後端和瀏覽器經過二進制也能夠進行正常交互。
  2. 文本文件,data.toString()能夠看到原始的數據,注意若是是圖片視頻等二進制數據,toString就破壞了數據。

C/C++ Addons

可使用C或C++書寫插件,極大的提高性能。瀏覽器

多進程 process

涉及模塊:child_process-子進程、cluste-集羣、process-進程
進程擁有獨立的存儲空間,同一個進程內的全部線程共享一套存儲空間。
image.png

  • 多進程:速度更慢,初始化和銷燬都須要跟計算機申請。安全,進程之間隔離,寫代碼更簡單。
  • 多線程:線程間通訊更復雜,寫代碼更復雜,涉及到多線程同步和鎖的問題。

crypto - 加密

crypto 模塊提供了加密功能,包括對OpenSSL的哈希、HMAC、加密、解密、簽名、以及驗證功能的一整套封裝。

const crypto = require('crypto');
function md5(str){
    let obj = crypto.createHash('md5');
    obj.update(str);
    return obj.digest('hex');
}
console.log(md5('123456'));// 16進制顯示結果

咱們將字符串'123456'使用md5加密,加密後的結果以下:
image.png

os - 操做系統

os 模塊提供了與操做系統相關的實用方法和屬性。

path - 路徑

path 模塊提供用於處理文件路徑和目錄路徑的實用工具。例如basename、dirname、extname、normalize、relative等。

events - 事件觸發器

構建node的異步事件驅動架構,EventEmitter實現自定義的異步事件。

const Event = require('events').EventEmitter;
let ev = new Event();
// 監聽(接收)
ev.on('msg', function(a, b, c){
    console.log('收到msg事件:', a, b, c);
});
// 派發(發送)
ev.emit('msg', 12, 5, 8);

image.png

querystring - 查詢字符串

發給服務器查詢字符串(url問號後面的字符串)的相關處理,處理爲一個json對象。

const querystring = require('querystring');
let obj = querystring.parse('wd=md5&rsv_spt=1&&issp=1&f=8&rsv_bp=1');
console.log(obj);

image.png
URL:url模塊用於處理與解析 URL,大部分時候咱們仍是使用url解析,

const url = require('url');
let obj = url.parse('https://www.baidu.com/s?wd=md5&rsv_spt=1&rsv_iqid=0x82af93ad003be6e4&issp=1&f=8&rsv_bp=1');
console.log(obj);

image.png

網絡

TCP - 穩定傳輸 Net
UDP - 快 UDP/Datagram

域名解析

dns - 域名服務器。使用示例:
服務器之間經過ip地址通訊,查看一個域名的ip地址,能夠直接ping查看IP地址。
image.png
dns的resolve實現了同上的域名解析。

const dns = require('dns');
dns.resolve('baidu.com',(err,res) => {
if (err){
    console.log('解析失敗');
} else {
    console.log(res);
}})

image.png

stream - 流

連續的數據相關操做,例如:視頻流、網絡流、文件流、語音流。

TLS/SSL

爲網絡通訊提供安全及數據完整性的一種安全協議。TLS與SSL在傳輸層與應用層之間對網絡鏈接進行加密。

zlib - 壓縮

gz壓縮,結合流使用,壓縮後的數據減小傳輸帶寬

相關文章
相關標籤/搜索