一、全局模塊
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
: