Node基礎(chǔ)入門(二):模塊

上一篇《Node基礎(chǔ)入門(一):起步》

一、全局模塊

1. 定義:何時何地都能使用琢岩,不需要引入投剥;

2. process.env:環(huán)境變量,執(zhí)行Node命令console.log(process.env) 担孔,類似于電腦的系統(tǒng)變量 :

3. process.argv:在D:\node\index.js中江锨,輸入console.log(process.argv),然后在命令行工具中輸入node index.js糕篇,發(fā)現(xiàn)打印了一個長度為2的數(shù)組啄育,我們再試下在后面添加一些信息,輸入node index.js a b 12 34 大海拌消,結(jié)果如下圖:

我們發(fā)現(xiàn)挑豌,a在數(shù)組的第2個位置,b在第3個位置……,也就是說這里相當于收錄用戶的輸入內(nèi)容氓英?于是侯勉,我們可以利用這一點實現(xiàn)一個簡單的加法計算器!index.js代碼修改如下:

// 將數(shù)組第2位的數(shù)作為被加數(shù)铝阐,注意將字符串轉(zhuǎn)為整形
let num1 = parseInt(process.argv[2])

// 將數(shù)組第3位的數(shù)作為加數(shù)
let num2 = parseInt(process.argv[3])

// 打印二者的和
console.log(num1 + num2)

命令行輸入node index.js 1 2址貌,結(jié)果:3

4. __dirname:當前文件目錄,index.js

console.log(__dirname)

命令行輸入node index.js徘键,結(jié)果:D:\node

二练对、系統(tǒng)模塊

1. 定義:需要require隘擎,但不需要額外下載二鳄;

2. path:用于處理文件路徑和目錄路徑的實用工具 ,index.js代碼修改如下:

let path = require('path')

console.log(path.dirname('/node/a/b/c/1.jpg')) // 文件路徑
console.log(path.basename('/node/a/b/c/1.jpg')) // 文件名
console.log(path.extname('/node/a/b/c/1.jpg')) // 文件擴展名
console.log(path.resolve('/node/a/b/c', '../../', 'd')) // 在c的上級的上級(即a下面)添加一個d
console.log(path.resolve(__dirname, 'index.js')) // 這樣可以得到index.js的絕對路徑

命令行輸入node index.js垄琐,結(jié)果如下:

/node/a/b/c
1.jpg
.jpg
D:\node\a\d
D:\node\index.js

3. fs:用于文件讀寫操作

(1). 讀文件fs.readFile()

let fs = require('fs')

// 第一個參數(shù)是文件路徑   
fs.readFile('./a.txt', (err, data) => {
  if (err) {
    console.log(err)
  } else {
    console.log(data)
    console.log(data.toString())
  }
})

在index.js同級目錄下新建a.txt赠制,內(nèi)容為abc赂摆,命令行輸入node index.js,結(jié)果:

<Buffer 61 62 63> // abc的二進制格式
abc // 調(diào)用.toString()才能打印abc

(2). 寫文件fs.writeFile()

let fs = require('fs')

fs.writeFile('b.txt', '月薪2萬', (err) => {
  if (err) {
    throw err
  }
})

命令行輸入node index.js钟些,結(jié)果:D:\node\下多了一個b.txt文件烟号,內(nèi)容為“月薪2萬”。如果改成“月薪3萬”再執(zhí)行一遍政恍,b.txt文件內(nèi)容就是“月薪3萬”汪拥,如何做到不覆蓋而是追加呢?加一個{flag: 'a'}(“a”表示append)即可:

fs.writeFile('b.txt', '月薪2萬', {flag: 'a'}, (err) => {...})

以上都是異步的(推薦)篙耗,我們看看同步的方式:

// 同步讀
let data = fs.readFileSync('./a.txt')
console.log(data.toString()) // abc

// 同步寫  
fs.writeFileSync('b.txt', '鼠你好運')

三迫筑、自定義模塊

1. 定義:require自己封裝的模塊;

2. exports:導(dǎo)出模塊宗弯,我們在D:\node\下新建mod.js脯燃,向外暴露a和b:

exports.a = 1
exports.b = 2

修改index.js

const mod = require('mod') // .js可以省略

console.log(mod.a)
console.log(mod.b)

命令行執(zhí)行index.js,發(fā)現(xiàn)報錯:找不到mod.js蒙保。原因是引用路徑不對辕棚,正確的路徑應(yīng)該為'./mod',這樣就能拿到a和b了邓厕。

其實逝嚎,如果不加'./'具體路徑,Node默認從node_modules文件夾下加載該模塊详恼。

如果既沒有指明路徑补君,又沒有node_modules文件夾,就會從Node的安裝目錄處找(里面也有一個node_modules文件夾昧互,安裝了一些全局的模塊)赚哗。

3. module:導(dǎo)出對象她紫、方法、類屿储,修改mod.js代碼:

// 通過導(dǎo)出對象以達到批量導(dǎo)出的目的
module.exports = {
  a: 1, 
  b: 2
}

// 或?qū)С龇椒?module.exports = function () {
  console.log(123)
}

// 或?qū)С鲱?module.exports = class {
  constructor (name) {
    this.name = name
  }
  show () {
    console.log(this.name)
  }
}

修改index.js

const mod = require('./mod')

// 若引入的是一個對象
console.log(mod.a) // 1
console.log(mod.b) // 2

// 若引入的是一個方法
mod() // 123

// 若引入的是一個類
let m = new mod('大海')
m.show() // 大海

四贿讹、HTTP模塊(核心)

服務(wù)器對象http.createServer(),快速搭建一個服務(wù)器够掠,依然修改D:\node\index.js:

let http = require('http')

http.createServer(() => {
  console.log('我來啦')
}).listen(8080)

命令行執(zhí)行node index.js民褂,接著新開一個瀏覽器窗口,訪問localhost:8080疯潭,現(xiàn)在再打開命令行工具赊堪,發(fā)現(xiàn)已經(jīng)打印了“我來啦”(訪問多少次就打印多少次),再繼續(xù)修改index.js

let http = require('http')

// 加入請求和響應(yīng)參數(shù)    
http.createServer((req, res) => {
  // 在頁面上打印‘index’
  res.write('index')
  // 需要標明結(jié)束
  res.end()

  // 或直接
  res.end('index')
}).listen(8080)

命令行執(zhí)行node index.js竖哩,瀏覽器訪問localhost:8080哭廉,頁面出現(xiàn)“index”:

為了讓頁面內(nèi)容豐富一點,我們在D:\node\下新建一個網(wǎng)頁文件a.html相叁,內(nèi)容為一句話加一張圖(準備一張圖片blog.jpg放入D:\node\):

<!DOCTYPE html>
<html>
<head>
  <title>Page Title</title>
</head>
<body>
  <h1>Welcome To My Blog</h1>
  <img src='./blog.jpg' alt='img'/>
</body>
</html>

這里需要使用上面講到的fs文件讀寫的內(nèi)容遵绰,修改index.js

let http = require('http')
// 需要讀網(wǎng)頁和圖片文件
let fs = require('fs')

http.createServer((req, res) => {
  // req.url就是需要訪問的文件路徑:/a.html 和 /blog.jpg
  fs.readFile(`.${req.url}`, (err, data) => {
    if (err) {
      res.writeHead(404)
      res.end('404 page not found!')
    } else {
      res.end(data)
    }
  })
}).listen(8080)

命令行執(zhí)行node index.js,瀏覽器訪問localhost:8080/a.html

也可以直接訪問圖片localhost:8080/blog.jpg

下一篇《Node基礎(chǔ)入門(三):數(shù)據(jù)交互》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末增淹,一起剝皮案震驚了整個濱河市椿访,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌虑润,老刑警劉巖成玫,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拳喻,居然都是意外死亡哭当,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門冗澈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钦勘,“玉大人,你說我怎么就攤上這事渗柿「雠瑁” “怎么了脖岛?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵朵栖,是天一觀的道長。 經(jīng)常有香客問我柴梆,道長陨溅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任绍在,我火速辦了婚禮门扇,結(jié)果婚禮上雹有,老公的妹妹穿的比我還像新娘。我一直安慰自己臼寄,他們只是感情好霸奕,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吉拳,像睡著了一般质帅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上留攒,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天煤惩,我揣著相機與錄音,去河邊找鬼炼邀。 笑死魄揉,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的拭宁。 我是一名探鬼主播洛退,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼红淡!你這毒婦竟也來了不狮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤在旱,失蹤者是張志新(化名)和其女友劉穎摇零,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桶蝎,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡驻仅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了登渣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片噪服。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖胜茧,靈堂內(nèi)的尸體忽然破棺而出粘优,到底是詐尸還是另有隱情,我是刑警寧澤呻顽,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布雹顺,位于F島的核電站,受9級特大地震影響廊遍,放射性物質(zhì)發(fā)生泄漏嬉愧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一喉前、第九天 我趴在偏房一處隱蔽的房頂上張望没酣。 院中可真熱鬧王财,春花似錦、人聲如沸裕便。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽偿衰。三九已至疯溺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哎垦,已是汗流浹背囱嫩。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留漏设,地道東北人墨闲。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像郑口,于是被迫代替她去往敵國和親鸳碧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

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