新手學(xué)習(xí)nodejs總結(jié)-01

什么是nodejs

Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行環(huán)境。 Node.js 使用了一個事件驅(qū)動先匪、非阻塞式 I/O 的模型种吸,使其輕量又高效。

tips:nodejs不是一個框架胚鸯,也不是一門編程語言骨稿。

nodejs的作用

  • nodejs一般用于服務(wù)器開發(fā)。解決和創(chuàng)建高性能的網(wǎng)絡(luò)應(yīng)用程序姜钳,這里就不得不提到nodejs的幾個特點了坦冠。
    • 事件驅(qū)動
      • 簡單的來說就是有事情觸發(fā)在執(zhí)行,如果你學(xué)習(xí)過java哥桥,那么你或多或少會知道觀察者模式辙浑,nodejs就相當(dāng)于觀察者模式。
        由于JavaScript是單線程的拟糕,利用事件輪詢判呕、任務(wù)隊列的異步操作來執(zhí)行倦踢。生動的說就像有一個死循環(huán),當(dāng)有事物觸發(fā)循環(huán)中的某個條件時侠草,再執(zhí)行該條件對應(yīng)的邏輯辱挥。
    • 非阻塞 IO(異步) 模型
      • 了解JavaScript就一定知道異步操作,回調(diào)函數(shù)這是JavaScript語言的一種特性边涕。tips:es6 promise鏈?zhǔn)骄幊陶叩母R簟?/li>
    • 單線程
      • 這個沒得說JavaScript本生就是單線程晤碘。
    • 跨平臺
      • 只要有node環(huán)境就能運行node程序了。
  • 命令行工具
  • 爬蟲
  • ......

nodejs的發(fā)展歷史

  • node之父是Ryan Dahl

    tips: 現(xiàn)在去搞go

    • 2009年功蜓,Ryan Dahl發(fā)布了最初的 Node 版本
    • 2010年园爷,Ryan Dahl 全職負責(zé) Node 的發(fā)展
    • 2011年,Node 在微軟的支持下發(fā)布了 Windows 版
    • 2012年式撼,Ryan Dahl 將node轉(zhuǎn)交給了 Isaac Z.Schlueter
    • 2015年童社,Node 與 io.js 合并,Node 的版本從 0.12.7 升級到了 4.0.0
      • 合并后的 io.js 和 Node 在 Joyent 公司的維護下并行了兩個版本:
      • 一個是4.x.x 還是原來的 Node著隆,這個版本是穩(wěn)定版
      • 一個是5.x.x扰楼,目前已經(jīng)更新到了 6.8.1,其實就是 io.js旅东,最新特性版灭抑,不建議生產(chǎn)環(huán)境使用
      • Node 計劃在 2016 年 10月底正式發(fā)布 Node 7.0
    • 7.0 已經(jīng)最大限度的支持了很多的 ES6 新語法
    • 而且提高了整體的執(zhí)行性能,提供了一些別的API

    tips:要學(xué)就用最新版本

安裝node環(huán)境

下載地址為https://nodejs.org/en/download/

  • 下載后一直點下一步抵代,下一步就能安裝成功
    • 安裝成功后打開命令行輸入node --version,能顯示相應(yīng)的版本表示安裝成功腾节。

這時候我們可以試試nodejs的作用,你可以直接在命令行輸入node,這就相當(dāng)于一個編寫頁一樣荤牍,你可以試著寫console.log('hello'),回車控制臺輸出 hello案腺。

  • 其實node不僅可以跟命令還可以接js文件執(zhí)行

    • 你可以將代碼寫到文件中,node hello.js也是同樣的效果康吵,前提是你當(dāng)前路徑必須包含此文件劈榨,不然報錯
  • common.js

    • nodejs是采用了commonJS規(guī)范的。
      • 為什么會有這個規(guī)范呢晦嵌,因為JavaScript天生就不支持模塊化同辣。還沒有塊級作用域。

    本java程序員表示非常不解惭载。
    * 所以瀏覽器的JavaScript和node中的JavaScript不是一樣的旱函。
    + nodejs的模塊化
    * nodejs中使用require關(guān)鍵字來加載模塊,使用exports來導(dǎo)出模塊描滔。
    * nodejs中內(nèi)置了一些核心模塊棒妨,我們可以使用fs這個讀寫文件的模塊來簡單了解nodejs。

//引入fs模塊
var fs = require('fs');

//假設(shè)我要讀取一個名字問hello.txt的文件
fs.readFile('./hello.txt',function (err, data) {
    //如果讀取失敗
    if (err) {
        console.log('讀取文件失敽ぁ券腔!');
        return;
    }

    console.log(data);
})

這是一個簡單的異步的讀取文件
其實fs模塊還有寫文件等功能伏穆,這里就不一一說明。

  • 我們可以了解到var fs = require('fs');可以引入一個核心模塊纷纫,它也可以引入一個第三方模塊枕扫,還可以引入自己寫的模塊。
    • 假設(shè)我有個模塊叫hello.js那么它就是這樣涛酗。
        //后綴的.js可以省略铡原,也可以不省,隨你的性子來商叹,但是99%人都省了所以....
        var hello = require('./hello');
    
    • 加載的時候會執(zhí)行hello.js內(nèi)的所有代碼。但是如果hello.js中沒有exports的話那這個hello就是空的只泼。
  • nodejs中的模塊導(dǎo)出剖笙。
    • 你可以這樣寫hello.js來返回內(nèi)容
        exports.say = function () {
                console.log('hello');
            }
    
    
    • 那么調(diào)用這個模塊的人就可以這樣用
        var hello = require('./hello');
    
        hello.say();
    
    
    • 這是導(dǎo)出一個say,當(dāng)然你也可以導(dǎo)出任何js支持的數(shù)據(jù)格式
    • 但是這不是單個成員的時候
        var num = 1;
    
        exports.num = num;
    
        exports.fun = function () {
            
        }
        //........
    

exports我們不導(dǎo)出單個成員時能這么寫,導(dǎo)出單個成員就不能這么寫了请唱。

  • exports的導(dǎo)出原理
    • 其實可以這樣理解
    • 很簡單我相信你一看代碼就懂了
//相當(dāng)于每個模塊最前方有這幾句代碼
var module = {
    exports:{}
}
// 模塊中同時還有一個成員 exports 等價于 module.exports
var exports = module.exports;
/**
 *  你寫的代碼其實都在這里弥咪,懂了嗎?
 *  其實實際返回的是module.exports十绑。exports只是module.exports的簡寫聚至。
 *  當(dāng)exports=時引用地址變了,而module.exports的引用地址沒有改變本橙。
 *  實際返回的是module.exports
 **/

return module.exports;

+ 所以要返回單個成員必須這樣
```javascript
    module.exports = xx;
```

ok,今天就寫到這扳躬。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市甚亭,隨后出現(xiàn)的幾起案子贷币,更是在濱河造成了極大的恐慌,老刑警劉巖亏狰,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件役纹,死亡現(xiàn)場離奇詭異,居然都是意外死亡暇唾,警方通過查閱死者的電腦和手機促脉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來策州,“玉大人瘸味,你說我怎么就攤上這事〕榛睿” “怎么了硫戈?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長下硕。 經(jīng)常有香客問我丁逝,道長汁胆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任霜幼,我火速辦了婚禮嫩码,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘罪既。我一直安慰自己铸题,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布琢感。 她就那樣靜靜地躺著丢间,像睡著了一般。 火紅的嫁衣襯著肌膚如雪驹针。 梳的紋絲不亂的頭發(fā)上烘挫,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音柬甥,去河邊找鬼饮六。 笑死,一個胖子當(dāng)著我的面吹牛苛蒲,可吹牛的內(nèi)容都是我干的卤橄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼臂外,長吁一口氣:“原來是場噩夢啊……” “哼窟扑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起寄月,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤辜膝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后漾肮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體厂抖,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年克懊,在試婚紗的時候發(fā)現(xiàn)自己被綠了忱辅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡谭溉,死狀恐怖墙懂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扮念,我是刑警寧澤损搬,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響巧勤,放射性物質(zhì)發(fā)生泄漏嵌灰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一颅悉、第九天 我趴在偏房一處隱蔽的房頂上張望沽瞭。 院中可真熱鬧,春花似錦剩瓶、人聲如沸驹溃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽豌鹤。三九已至,卻和暖如春枝缔,著一層夾襖步出監(jiān)牢的瞬間傍药,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工魂仍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拣挪。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓擦酌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親菠劝。 傳聞我的和親對象是個殘疾皇子赊舶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容

  • Node.js是目前非常火熱的技術(shù)赶诊,但是它的誕生經(jīng)歷卻很奇特笼平。 眾所周知,在Netscape設(shè)計出JavaScri...
    w_zhuan閱讀 3,617評論 2 41
  • Node.js是目前非程蚧荆火熱的技術(shù)寓调,但是它的誕生經(jīng)歷卻很奇特。 眾所周知锄码,在Netscape設(shè)計出JavaScri...
    Myselfyan閱讀 4,076評論 2 58
  • 系列文章導(dǎo)航 模塊(二) es6 module typescript module 本文參考Javascript模...
    合肥黑閱讀 8,857評論 0 14
  • 作者:馬齡陽efe.baidu.com/blog/nodejs-module-analyze/ Node.js 的...
    grain先森閱讀 1,138評論 2 17
  • 世界觀不只是把分散夺英、獨立,無關(guān)的信念湊在一起滋捶,而是一個緊密交織的信念體系痛悯。 每一片拼圖片片相接,和旁邊的吻合重窟,旁邊...
    鷹如來閱讀 443評論 0 2