官網:http://nodesjs.orgjavascript
Node
前臺JS能用的東西,後臺都能用,只是Node裏面不涉及樣式層,不關注html、css;node提供了不少模塊css
實現一個簡單的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);
localhost:3000
,能夠看到server接收到了消息
訪問http://localhost:3000/1.html
時,返回響應的內容到前端。
前端
Q: NodeJs能處理併發嗎?
NodeJs和Js同樣的單線程、單進程。NodeJs採用非阻塞的異步交互。java
Q:收到消息打印了2次?
咱們使用ie7瀏覽器,發現只打印了一次,也就是說高級瀏覽器打印了2次。
打開高級瀏覽器的開發者工具,能夠看到發送請求的時候,瀏覽器主動去請求了網站小圖標,這就是爲何有2條的緣由。
node
模塊提供了一組簡單的斷言測試,可用於測試不變量,不知足條件的時候程序直接中斷。
示例: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));
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進制的二進制流。
後端
data.toString()
能夠看到原始的數據,注意若是是圖片視頻等二進制數據,toString就破壞了數據。可使用C或C++書寫插件,極大的提高性能。瀏覽器
涉及模塊:child_process-子進程、cluste-集羣、process-進程
進程擁有獨立的存儲空間,同一個進程內的全部線程共享一套存儲空間。
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加密,加密後的結果以下:
os 模塊提供了與操做系統相關的實用方法和屬性。
path 模塊提供用於處理文件路徑和目錄路徑的實用工具。例如basename、dirname、extname、normalize、relative等。
構建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);
發給服務器查詢字符串(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);
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);
TCP - 穩定傳輸 Net
UDP - 快 UDP/Datagram
dns - 域名服務器。使用示例:
服務器之間經過ip地址通訊,查看一個域名的ip地址,能夠直接ping查看IP地址。
dns的resolve實現了同上的域名解析。
const dns = require('dns'); dns.resolve('baidu.com',(err,res) => { if (err){ console.log('解析失敗'); } else { console.log(res); }})
連續的數據相關操做,例如:視頻流、網絡流、文件流、語音流。
爲網絡通訊提供安全及數據完整性的一種安全協議。TLS與SSL在傳輸層與應用層之間對網絡鏈接進行加密。
gz壓縮,結合流使用,壓縮後的數據減小傳輸帶寬