nodejs常用的全局對象和一些內(nèi)部模塊

特點(diǎn):

(1)前后端都用js編寫容易實(shí)現(xiàn)全棧

(2)非阻塞 i/o (最重要)

(3)完善的生態(tài)

(4)使用v8引擎

劣勢:nodejs不適合計算密集型程序,只適合 i/o 密集型程序

運(yùn)行node:(1)進(jìn)入到當(dāng)前文件所在路徑

(2)運(yùn)行node必須使用命令行,node+文件名字運(yùn)行

異步:代碼不是一行一行執(zhí)行的

回調(diào):當(dāng)做完一件事的時候,馬上反饋這件事

相對路徑:“.”或者“無”開頭的就是相對路徑

js創(chuàng)建對象:(1){a:1}

(2)var obj??= new Object();

(3)function bar(){

this.a = 3;

}

全局對象:可以直接調(diào)用的對象我們稱之為全局對象

1.console:可以調(diào)用log這個方法

2.setTimeout:超時調(diào)用

3.setInterval:間歇調(diào)用

4._ _dirname:當(dāng)前文件所在路徑

5._ _filename:當(dāng)前文件的路徑包括文件名

6.require:require的參數(shù)就是exports曝光文件的相對路徑 ?require('./index.js');

7.exports:曝光,曝光后的變量別的文件就可以使用require引用

使用exports曝光變量必須加上屬性,屬性名可以自擬,然后可以曝光給其他文件,對象的鍵是屬性名,值是曝光變量的值

(1)曝光變量(2)曝光對象(3)曝光方法(4)曝光構(gòu)造函數(shù)

(5)曝光工廠函數(shù):使用new Object創(chuàng)建對象,返回值,返回的是創(chuàng)建的對象

8.module:module和exports一起使用,exports可以作為module的屬性

可以不添加屬性,使用require引用

(1)pwd:顯示當(dāng)前路徑??(2)cd:切換??(3)ls:展示下級所有

OS——官方為我們提供的文件 operation system操作系統(tǒng)

(1)使用官方為我們提供的js文件,需省略‘.js’后綴。

(2)不能以‘.’開頭,如果引用自己定義的文件,路徑必須以‘.’開頭。

OS的作用:

node.js官方為我們提供有助于編程的文件,叫核心模塊,都可以用require引用

(1)打印操作系統(tǒng),查看當(dāng)前node.js運(yùn)行的平臺是什么操作系統(tǒng)

console.log(os.platform());

(2)cpus:打印cpu參數(shù)和cpu核數(shù)

(3)hostname:打印主機(jī)名稱

(4)arch打印cpu架構(gòu)

核心模塊!

1.process — 進(jìn)程:一個程序運(yùn)行起來就是進(jìn)程,有進(jìn)程就有進(jìn)程號

可以通過pid查看當(dāng)前node運(yùn)行的進(jìn)程號

2.util — untility(工具)

可以格式化我們的字符串

(1)format:%d表示數(shù)字???%s表示字符串

(2)util:可以查看屬性和方法明細(xì),通過inspect。

(3)depth:打印到第幾層????????console.log(util.inspect(util,{depth:1 } ) );

3.path — 用來操作路徑

1.parse 解析路徑

(1)root:根目錄

(2)dir:當(dāng)前文件所在的目錄

(3)base:當(dāng)前文件的帶有擴(kuò)展名的文件名

(4)ext:擴(kuò)展名

(5)name:文件名

2.join 合并路徑

join里面的參數(shù)可以是路徑和文件的名字

3.isAbsolute是否絕對路徑

它的返回值是布爾值,如果true為絕對路徑,否則為相對路徑

4.extname — 得到文件的擴(kuò)展名

4.events — 引用時間模塊后,需創(chuàng)建監(jiān)聽發(fā)射事件的對象

使用事件需要映入時間模塊events,必須加s

使用事件必須創(chuàng)建EventEmitter這個對象,這里的Event沒有s,第一個字母大寫

var em = new event.EventEmitter;

(1)on 監(jiān)聽事件方法

(2)emit 用來觸發(fā)事件

(3)once 只監(jiān)聽一次

5.Buffer

①就是緩存,存數(shù)據(jù),存比較大的數(shù)據(jù)

②存放的為二進(jìn)制的數(shù)據(jù)

③Buffer的數(shù)據(jù)存在主機(jī)內(nèi)存中,內(nèi)存多大可以存多大

創(chuàng)建Buffer

1.使用new創(chuàng)建?????var buf = new Buffer();

①Buffer也是一個全局對象

②Buffer第一個字母大寫

③Buffer括號中的內(nèi)容為Buffer的大小,單位字節(jié)

2.使用字符串創(chuàng)建

var buf = new Buffer(‘hello’);

console.log(buf.toString());

toString();可以把它打印成字符串

3.使用數(shù)組創(chuàng)建

var buf = new Buffer([1,3]);

6.流(stream)

在計算機(jī)中任何數(shù)據(jù)傳輸都是通過流

在node.js中流是一個 抽象的接口,用來傳輸010101(二進(jìn)制),其實(shí)就是數(shù)據(jù)

在nide.js中流這個抽象的接口出去的就是數(shù)據(jù)流

在node.js中流(stream)也是核心模塊

可以把stream看成Event.Emitter的子類

因?yàn)閞equire('stream')曝光的是構(gòu)造方法,所以需要new創(chuàng)建對象

流的方向:在node.js中流是有方向的是相對于cpu分為讀流和寫流

創(chuàng)建讀流:Readable

創(chuàng)建寫流:Writable

創(chuàng)建讀寫流:Duplex

總結(jié):

流是一個抽象的接口,包括讀流寫流和讀寫流在node.js中流不是字節(jié)流node.js中基本上不會自己創(chuàng)建流,都是使用其它模塊為我們創(chuàng)建好的流

小結(jié)總結(jié):

核心模塊:os ?process ?path ?events ?util ?stream

全局對象:console ?__dirname ?__filename setTimeout setIntval module exports require

7.文件模塊(fs【file system】)

文件模塊是任何語言都很重要的模塊

在計算機(jī)中除了文件夾都是文件,在linux中,只有文件

fs模塊對文件的操作主要就是增刪改查

在node.js中任何對文件的操作都分為同步異步

①異步讀取文件 readFile()

第一個參數(shù)文件路徑,第二個參數(shù)是回調(diào),注意在回調(diào)函數(shù)中有兩個參數(shù),第一個是error,第二個是獨(dú)到的數(shù)據(jù)

fs會把文件讀取到Buffer中

因?yàn)槟阋雈s這個模塊所以readFile()這個官方的方法已經(jīng)寫好了,作用就是讀取完的數(shù)據(jù)會自動放到回調(diào)函數(shù)的data中如果有錯誤會通過error報出

②同步讀取文件 readFileSync()

一個參數(shù)及文件路徑

③異步寫文件 writeFile()

第一個參數(shù)要寫入文件的路徑,第二個寫入文件的內(nèi)容,第三個回調(diào)函數(shù),回調(diào)參數(shù)只有一個參數(shù)就是error

④同步寫文件 ?writeFileSync()

第一個參數(shù)路徑,第二個參數(shù)要寫的內(nèi)容

⑤異步追加文件內(nèi)容 ?appendFile()

第一個參數(shù)路徑,第二個參數(shù)內(nèi)容,第三個參數(shù)回調(diào),回調(diào)參數(shù)是error

⑥同步追加文件內(nèi)容 appendFileSync()

第一個參數(shù)路徑,第二個參數(shù)是追加的內(nèi)容

⑦異步改變文件名 rename()

第一個參數(shù)是老名字,第二個參數(shù)是新名字,第三個參數(shù)是回調(diào)函數(shù)返回error

⑧同步改變文件名renameSync()

第一個參數(shù)是老名字,第二個參數(shù)是新名字

8.文件和流

一、使用流讀取文件 createReadStream()

一個參數(shù)要讀文件的路徑

注意:該方法返回的是一個讀流

因?yàn)樽x流是繼承EventEmitter所以讀流on和emit事件

①使用讀流獲取數(shù)據(jù)需要用on且第一個參數(shù)為'data',不用emit觸發(fā)該事件,第二個參數(shù)是一個回調(diào)函數(shù)且有一個參數(shù)則該參數(shù)是被讀文件的內(nèi)容

沒通過emit觸發(fā)事件卻調(diào)用了函數(shù)是因?yàn)槭褂玫膄s.createReadStream創(chuàng)建的流這個方法是官方定義的,所以當(dāng)讀流的時候就可以自動觸發(fā)'data'事件,當(dāng)檢測文件有數(shù)據(jù)的時候回調(diào)函數(shù)的參數(shù)就是我們讀取的文件的內(nèi)容

②可以通過給createStream()添加選項(xiàng)來指定我們讀取字節(jié)的個數(shù),選項(xiàng)是第二個參數(shù),是一個js對象{start:起始位置,end:結(jié)束位置}

③還可以通過'end'事件來額外操作,該事件是在讀取完文檔后觸發(fā),所以之前必須有'data'事件

總結(jié):說明讀流會自動觸發(fā)兩個事件'data'和'end'

二、使用流寫文件 createWriteStream()

注意:該方法返回的是一個寫流

寫流通過write方法寫入內(nèi)容,方法的參數(shù)就是寫入的內(nèi)容

寫流通過end方法告訴文件所有內(nèi)容寫入完畢

注意不能在end方法后使用write方法會出錯

全總結(jié):讀流兩事件,寫流兩方法

readFile和createReadStream的區(qū)別

文件是當(dāng)前所有內(nèi)容讀取完后操作

流是對文件中的字節(jié)操作

比如:在流中專門提供了{(lán)start:"起始位置",end:"結(jié)束位置"}的方法對文件內(nèi)容進(jìn)行邊讀邊截取

但是在文件中需要先把文件內(nèi)容全部獲取然后在通過字符串的方法進(jìn)行截取

9.net

服務(wù)器端:

① 引入模塊

②創(chuàng)建服務(wù)器端對象

createServer()

③監(jiān)聽

listen()

一個參數(shù):端口號

④使用connection事件

只要客戶端連接就會觸發(fā)這個事件

⑤將客戶端的client對象返回到createServer的參數(shù)中

⑥client是繼承流的所以可以讀流,可以使用'data'事件

客戶端:

①引入模塊

②創(chuàng)建連接對象 createConnection()

兩個參數(shù),第一個是要連接的端口的端口號,第二個是要連接的主機(jī)的ip地址(本機(jī):127.0.0.1或者localhost)

③使用connect事件

④client是繼承流的所以可以寫流,可以使用write方法書寫文本

10、readline? ? 逐行讀取

獲取當(dāng)前輸入的內(nèi)容,需要進(jìn)程模塊輔助創(chuàng)建readline對象

var? ? rd=new readline.createInterface({input:p.stdin,output:p.stdout})

監(jiān)聽line事件,該事件是當(dāng)接收到回車時觸發(fā)

11、url? ? 網(wǎng)址? ? 統(tǒng)一資源定位符? ? (unit resouny location)

①url.parse()? ??打印網(wǎng)址的詳細(xì)信息(參數(shù)是網(wǎng)址)

12、querystring? ? 查詢字符串

①qs.parse()? ? 用來將a=b這種格式解析成{a:b}

13、http? ? (超文本傳輸協(xié)議:hyper? ? text? ? transfer? ? protocal)

①引入http模塊

②創(chuàng)建http對象

createServer()

③監(jiān)聽端口

listen()

④請求時要執(zhí)行的部分

在createServer中加上回調(diào)函數(shù),這個回調(diào)函數(shù)就是我所要執(zhí)行的任務(wù),createServer的作用就是當(dāng)有請求?? ?? ? ? ? ? ?的時候,執(zhí)行function這里面的代碼。

回調(diào)函數(shù)有兩個參數(shù)都是對象

①req(request)用來請求對象? ? 繼承讀流

1.url? ? 表示請求的url地址

2.method? ? 請求方法(post,get,pnt,delete,update,Head~~~)

②res(response)表示響應(yīng)對象? ? 繼承寫流

可以通過fs模塊引入html模塊輸入到網(wǎng)頁中

node js還有很多外部模塊后面會更新

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測試 ...
    KeKeMars閱讀 6,366評論 0 6
  • Node.js是目前非常火熱的技術(shù),但是它的誕生經(jīng)歷卻很奇特。 眾所周知,在Netscape設(shè)計出JavaScri...
    w_zhuan閱讀 3,638評論 2 41
  • Node.js是目前非常火熱的技術(shù),但是它的誕生經(jīng)歷卻很奇特。 眾所周知,在Netscape設(shè)計出JavaScri...
    Myselfyan閱讀 4,087評論 2 58
  • 《道德經(jīng)》第31章:夫兵者,不祥之器,物或惡之,故有道者不處。君子居則貴左,用兵則貴右。兵者不祥之器,非君子之器,...
    奔跑的石頭閱讀 12,052評論 1 14
  • 1. 叮鈴鈴,叮鈴鈴,叮鈴鈴…… 聽不見,聽不見,聽不見…… 叮鈴鈴,叮鈴鈴,叮鈴鈴…… 呃……你贏了。 “喂?”...
    蔻蔻小魚閱讀 580評論 0 1