node

簡介

node.js是一個讓js運行在服務(wù)器端的開發(fā)平臺认轨,它不是一種獨立的語言,它是一個js的執(zhí)行環(huán)境别惦。

特點

單線程狈茉、非阻塞I/O、事件驅(qū)動步咪,其實這三個特點說的都是事件循環(huán)论皆。

  • 事件循環(huán):js是單線程的,所有任務(wù)都在主線程上執(zhí)行猾漫,形成一個執(zhí)行棧点晴,主線程之外還有一個任務(wù)隊列,系統(tǒng)會把異步任務(wù)還有計時器放到任務(wù)隊列中悯周,然后繼續(xù)執(zhí)行主線程的任務(wù)粒督,直到主線程中任務(wù)都執(zhí)行完了,再將任務(wù)隊列的任務(wù)出隊禽翼,加入到執(zhí)行棧中執(zhí)行屠橄,這種運行機制就是事件循環(huán)。

適用場景

node.js適合大量的并發(fā)I/O闰挡,而不善于大量計算锐墙,也適合websocket等長連接的實時交互程序。

核心API

global

在瀏覽器js中长酗,window是全局對象溪北,而node中的全局對象是global,所有全局變量都是global的屬性。

__filename 指向當(dāng)前運行的腳本文件名

__dirname 當(dāng)前執(zhí)行腳本的所在目錄

process

process是一個全局變量之拨,是global對象的屬性茉继,他用于描述當(dāng)前node進程狀態(tài)的對象。

Process.nextTick(callback):是為事件循環(huán)設(shè)置一項任務(wù)蚀乔,node.js會在下次事件循環(huán)中調(diào)用烁竭。

process.stdout:用來控制標(biāo)準(zhǔn)輸出,就是在命令行窗口向用戶顯示內(nèi)容吉挣,process.stdout.write等同于console.log派撕。

process.argv:返回命令行腳本的各個參數(shù)組成的數(shù)組。

process.env:指向當(dāng)前shell的環(huán)境變量听想,比如process.env.NODE_ENV腥刹,用來判斷當(dāng)前node環(huán)境變量,一般判斷production還是dev汉买。

child process

child_process模塊用于新建子進程,

exec():方法用于執(zhí)行bash命令佩脊,參數(shù)為要執(zhí)行的shell命令字符串蛙粘。

let exec = require('child_process').exec;
exec('npm run dev',()=>{
  // do something
})

events.EventEmitter

EventEmitter的核心就是事件發(fā)射與事件監(jiān)聽器功能的封裝。

let events = require('events');
let emitter = new events.EventEmitter();
//為指定事件注冊一個監(jiān)聽器威彰,事件名和回調(diào)函數(shù)
emitter.on('abcEvent',(a,b)=>{});
emitter.on('abcEvent',(a,b)=>{});
//觸發(fā)所有abcEvent事件出牧,后面是傳遞的參數(shù)
emitter.emit('abcEvent','1','2');
//為指定事件注冊一個單次監(jiān)聽器,即只會觸發(fā)一次
emitter.once('abcEvent','1','2');

util

Util.inspect:類似json.stringify

util.inherits(constructor, superConstructor):是一個實現(xiàn)對象間的原型繼承的函數(shù).

fs

fs模塊是文件操作的封裝歇盼。

var fs = require('fs');
//讀取abc.txt舔痕,該函數(shù)為異步,回調(diào)中的data就是讀取的文件內(nèi)容豹缀,未聲明encoding則為buffer
fs.readFile('abc.txt',(err,data)=>{
  console.log(data)
})
//為讀取文件的同步版本
fs.readFileSync()

http

let http = require('http');
http.createServer((req,res)=>{
  //do somethings
}).listen(8080,'127.0.0.1');

上面代碼用于創(chuàng)建一個服務(wù)器伯复,監(jiān)聽本機的8080端口。

request():方法用于發(fā)出http請求

http.request(options,callback)

options對象可以設(shè)置如下屬性邢笙。

hostname:http請求所發(fā)往的域名或者ip地址啸如,默認(rèn)是localhost

port:遠(yuǎn)程服務(wù)器的端口,默認(rèn)是80

method:指定http請求的方法氮惯,格式為字符串叮雳,默認(rèn)為get

path:指定http請求的路徑,默認(rèn)路徑(/)妇汗。

PM2

pm2:可以讓用戶跟簡單的部署多進程的node應(yīng)用帘不,且守護進程

// app.js
let http = require('http');
http.createServer((req,res)=>{
  res.writeHead(200);
  res.end("hello world");
}).listen(8080);

上面代碼是建立一個web服務(wù)器,然后用pm2啟動這段代碼

pm2 start app.js -i 4

啟動服務(wù)器杨箭,并且新建4個worker進程寞焙,如果i的數(shù)值是0,那么當(dāng)前機器有幾個cpu內(nèi)核,pm2就會啟動幾個worker進程棺弊。

如果worker進程由于某種原因掛掉了晶密,會立刻重啟該進程。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末模她,一起剝皮案震驚了整個濱河市稻艰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌侈净,老刑警劉巖尊勿,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異畜侦,居然都是意外死亡元扔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門旋膳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來澎语,“玉大人,你說我怎么就攤上這事验懊∩眯撸” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵义图,是天一觀的道長减俏。 經(jīng)常有香客問我,道長碱工,這世上最難降的妖魔是什么娃承? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮怕篷,結(jié)果婚禮上历筝,老公的妹妹穿的比我還像新娘。我一直安慰自己匙头,他們只是感情好漫谷,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蹂析,像睡著了一般舔示。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上电抚,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天惕稻,我揣著相機與錄音,去河邊找鬼蝙叛。 笑死俺祠,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蜘渣,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼淌铐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蔫缸?” 一聲冷哼從身側(cè)響起腿准,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拾碌,沒想到半個月后吐葱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡校翔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年弟跑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片防症。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡孟辑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蔫敲,到底是詐尸還是另有隱情扑浸,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布燕偶,位于F島的核電站,受9級特大地震影響础嫡,放射性物質(zhì)發(fā)生泄漏指么。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一榴鼎、第九天 我趴在偏房一處隱蔽的房頂上張望伯诬。 院中可真熱鬧,春花似錦巫财、人聲如沸盗似。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赫舒。三九已至,卻和暖如春闽瓢,著一層夾襖步出監(jiān)牢的瞬間接癌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工扣讼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缺猛,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像荔燎,于是被迫代替她去往敵國和親耻姥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354

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

  • Node.js是目前非秤凶桑火熱的技術(shù)琐簇,但是它的誕生經(jīng)歷卻很奇特。 眾所周知摔吏,在Netscape設(shè)計出JavaScri...
    w_zhuan閱讀 3,615評論 2 41
  • topics: 1.The Node.js philosophy 2.The reactor pattern 3....
    宮若石閱讀 1,080評論 0 1
  • # 模塊機制 node采用模塊化結(jié)構(gòu)鸽嫂,按照CommonJS規(guī)范定義和使用模塊,模塊與文件是一一對應(yīng)關(guān)系征讲,即加載一個...
    RichRand閱讀 2,506評論 0 3
  • Node.js是目前非尘菽常火熱的技術(shù),但是它的誕生經(jīng)歷卻很奇特诗箍。 眾所周知癣籽,在Netscape設(shè)計出JavaScri...
    Myselfyan閱讀 4,072評論 2 58
  • 江山何處覓封侯,八千云月瓜州頭滤祖。 終軍系虜請長纓筷狼,卻唯見北固亭樓。
    沒文化的流氓Holin閱讀 287評論 0 0