前不久一直在學vue.js 對于自帶的腳手架很多運行模式不是很理解康谆。做了個小dome就停了,瀏覽了一些es6語法,模塊化的概念免都,今天遇到node.js讓我有一種豁然開朗的感覺廊酣。原來好多疑惑的事情是這么回事能耻。
1.?什么是node.js?
正如維基百科所說:“Node.js 是谷歌 V8 引擎、libuv平臺抽象層 以及主體使用 Javscript 編寫的核心庫三者集合的一個包裝外殼亡驰∠停” ?我的理解 它是一個服務器端語言,讓js不在只依賴于瀏覽器凡辱,提供了一個新的環(huán)境戒职,利用事件驅動,實現(xiàn)異步執(zhí)行透乾,用回調(diào)把函數(shù)作為參數(shù)傳到總函數(shù)的參數(shù)中洪燥,從而可以按照你想要的執(zhí)行邏輯異步執(zhí)行,執(zhí)行函數(shù)就像是一個插排 ?各個回調(diào)函數(shù)就像插排上的開關按鈕乳乌,通過插排觸發(fā)開關執(zhí)行電燈(函數(shù))
2.?為什么要用node.js ?
讓我們來分析一下node.js的優(yōu)點和缺點捧韵,首先優(yōu)點采用了基于 WebSocket 的推送技術打破了傳統(tǒng)的無狀態(tài)的請求-返機制的無狀態(tài)交互機制,實現(xiàn)了雙向連接的web應用钦扭,客戶端和服務器端都可以發(fā)起請求纫版,其次它實現(xiàn)了利用事件驅動的 I/O 操作保持了跨平臺并且使用非阻塞的異步開發(fā)。首先I/O 操作這個概念需要了解一下客情,簡單的說I就是input其弊,O就是output,也就是在設備平臺上輸入和輸出膀斋,因為現(xiàn)在cup的速度都很快梭伐,所以當有大量I/O 操作時候,會出現(xiàn)阻塞的情況仰担,而node.js則利用事件回調(diào)使用非阻塞的異步 I/O糊识,所有連接都由該線程處理(所有時間都掛在事件循環(huán)中)并且不用同事開很多線程使得它節(jié)約了很多內(nèi)存(包括新線程的內(nèi)存,以及每個線程的上下文環(huán)境)。但它也有它的局限性赂苗,由于都由一個線程處理愉耙,所以它并不擅長大量計算的請求,這樣會出現(xiàn)線程暫時失去連接拌滋,更為致命的是這影響的不只是一個請求朴沿,而是所有的請求一直阻塞,直到計算后才可以恢復正常败砂。
3.node.js的初使用--配置服務器
配置方法下載什么的就不說了赌渣,到處都有,先配置一個服務器吧昌犹,新建一個server.js的頁面坚芜。
const http = require('http');
const hostname = '127.0.0.1';
const port = 1337;
http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello node.js\n');
}).listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
這段代碼分別是? 先引入node.js的http模塊,然后定義主機地址斜姥,端口號鸿竖,然后用createServer方法創(chuàng)建一個服務器,傳入req? 請求對象铸敏,res? 響應對象 千贯,然后res.writeHead定義響應頭,再定義相應體內(nèi)容并且用end結尾搞坝,然后監(jiān)聽定義好的1337端口搔谴,和主機地址并執(zhí)行回調(diào)函數(shù) console.log(`Server running at http://${hostname}:${port}/`);
4.node.js的初使用--理解回調(diào)函數(shù)
回調(diào)函數(shù)就是把執(zhí)行的函數(shù)作為參數(shù)傳到另一個函數(shù)里面調(diào)用,有三種調(diào)用形式:
1. 對象調(diào)用桩撮,舉例:
?function a() { console.log("hello") };
function b(callback) { callback();console.log('world') }
b (a)