以下皆為拉勾教育課件內(nèi)筆記
模塊
Node.js 中的模塊是具有特定功能的對象。按照模塊的作者進行劃分,可以分成三類:
- 內(nèi)置模塊:也叫核心模塊,
- 對應 Web 端 JS 的宿主對象,例如:window,localtion,history 等;
- 無需單獨安裝 - 會隨著Node.js一起安裝;
- 可以在官方API文檔中查看:http://nodejs.cn/api/
- 自定義模塊:程序員自己寫的,具有一定功能的代碼塊。
- 文件模塊:單獨的一個 JS 文件組成的模塊
- 目錄模塊:多個 JS 文件組合在一起,放在一個目錄中形成的模塊
- 第三方模塊:既不是內(nèi)置模塊,也不是自定義模塊。
- 對應 Web 端 JS 的第三方庫,例如:jQuery,Bootstrap 等。
- 想要使用,必須先安裝( 如同使用 jQuery 之前,必須先通過 script 標簽引入一樣 )
- 在Node.js中,大量的第三方模塊通過 npm 來管理。
內(nèi)置模塊
內(nèi)置模塊(也叫核心模塊)是官方提供的,無需下載,可以直接使用的模塊。
官網(wǎng):http://nodejs.cn/api/
-
console
console模塊提供了一個簡單的調(diào)試控制臺,類似于 Web 瀏覽器提供的 JavaScript 控制臺。// 不同類型的數(shù)據(jù),輸出后顏色不同 console.log('1'); console.log(1); var obj = { name: 'Tom', age: 19 } console.log(obj) console.table(obj) // 以表格方式展示數(shù)據(jù) console.time('for');//開始計時 for (var i = 1; i <= 100000; i++) { } console.timeEnd('for');//結束計時 console.time('while'); var i = 1; while (i <= 100000) { i++; } console.timeEnd('while');
-
process
process對象是一個全局變量,提供了有關當前 Node.js 進程的信息并對其進行控制。 作為全局變量,它始終可供 Node.js 應用程序使用,無需使用require()。 它也可以使用require()顯式地訪問:// process 是全局變量,可以不寫 require 引入 const process = require('process'); // 獲取操作系統(tǒng)架構 x64 console.log(process.arch) // 當前系統(tǒng)平臺信息 win32 console.log(process.platform) // 獲取當前文件所在的目錄 D:\cliu\Desktop\node console.log(process.cwd()) // current working directory // 環(huán)境變量 console.log(process.env) // 自定義環(huán)境變量 process.env.NODE_ENV = 'develop' console.log(process.env) // 獲取進程的編號 console.log(process.pid) // 殺死進程 process.kill(進程編號)
-
path
path 模塊負責文件路徑的
- ./ 表示當前目錄
- ../ 表示上一級目錄
- __dirname 返回當前文件所在的目錄
- __filename 返回當前文件的完整路徑(目錄+文件)
const path = require('path') // __dirname 獲取當前文件所在的目錄 path.join(__dirname, 'dist') // directory name console.log('join用于拼接多個路徑部分,并轉(zhuǎn)化為正常格式'); const temp = path.join(__dirname, '..', 'lyrics', './友誼之光.lrc'); console.log(temp); console.log('獲取路徑中的文件名'); console.log(path.basename(temp)); console.log('獲取一個路徑中的目錄部分'); console.log(path.dirname(temp)); console.log('獲取一個路徑中最后的擴展名'); console.log(path.extname(temp));
-
fs
fs (file system)模塊主要負責文件基本操作,官方文檔:fs 文件系統(tǒng) (nodejs.cn)
-
文件操作
// 使用 fs 之前先引入 const fs = require('fs') // 寫文件 (清空寫入:寫入之前會先將文件清空) # fs.writeFile('文件路徑','寫入內(nèi)容',回調(diào)函數(shù)) fs.writeFile('./1.txt', '曾經(jīng)有一首歌,她感動了我', (err) => { if (err) throw err console.log('寫入成功') }) // 讀文件 # fs.readFile('文件路徑', 回調(diào)函數(shù)) fs.readFile('./1.txt', (err, data) => { if (err) throw err // data 是二進制數(shù)據(jù),默認輸出時,以十六進制的方式展示 // 想要看到正常的效果,需要通過 toString() 轉(zhuǎn)換 console.log(data.toString()) }) // 刪除文件 # fs.unlink('文件路徑', 回調(diào)函數(shù)) fs.unlink(__dirname+'/1.txt', (err) => { if (err) throw err console.log('刪除成功') }) // 追加寫入(多次執(zhí)行,文件中會有多條數(shù)據(jù)) # fs.appendFile('文件路徑','寫入內(nèi)容',回調(diào)函數(shù)) fs.appendFile(__dirname+'/2.txt', '曾經(jīng)有一首歌,她是這樣唱的\n', (err) => { if (err) throw err console.log('追加寫入成功') }) -
目錄操作
// 創(chuàng)建目錄 fs.mkdir('./d1', (err) => { if (err) throw err console.log('創(chuàng)建成功') }) // 刪除目錄(只能刪除空目錄) fs.rmdir('./d1', (err) => { if (err) throw err console.log('刪除成功') }) // 重命名目錄(需要傳入完整路徑) // 語法:fs.rename(舊名稱,新名稱,回調(diào)函數(shù)) fs.rename(__dirname+'/d1', __dirname+'/d2', (err) => { if (err) throw err console.log('重命名成功') }) // 讀取目錄 fs.readdir(__dirname, (err, data) => { if (err) throw err // console.log(data) // data 是數(shù)組 data.map((d) => { // map 方法遍歷數(shù)組 console.log(d) }) }) // 先判斷目錄是否存在,若不存在則同步創(chuàng)建目錄 if (!fs.existsSync('./d2')) { fs.mkdirSync('./d2') } -
fs.stat查看狀態(tài)// 查看文件信息 fs.stat(__dirname+"/a.txt", (err, stat) => { if (err) throw err if (stat.isDirectory()) { // 判斷當前文件是否是目錄 console.log('目錄:', d) } else if (stat.isFile()) { // 判斷當前文件是否是普通文件 console.log('文件:', d) } })
Node.js 函數(shù)有同步與異步之分

-
http
以前,我們使用 Apache 或 Nginx 來搭建服務器。Node.js 中,也有搭建服務器的模塊。就是 http 模塊。
const http = require('http') // 1. 創(chuàng)建服務器 /** * req = request 請求 * res = response 響應 */ const server = http.createServer((req, res) => { res.statusCode = 200 res.setHeader('Content-Type', 'text/plain; charset=utf-8') res.end('你好:Node.js') }) // 2. 發(fā)布 web 服務 const port = 3000 const host = 'localhost' // 在瀏覽器中訪問 http://localhost:3000 然后能看到效果 server.listen(port, host, () => { console.log(`服務器運行在 http://${host}:${port}`) })
文件流
文件流方式讀寫文件的內(nèi)存效率提高,無需加載大量數(shù)據(jù)。流把大數(shù)據(jù)切成小塊,占用內(nèi)存更少。時間效率有一定提高,接獲數(shù)據(jù)后立即開始處理,無需等到內(nèi)存緩沖填滿。


const fs = require('fs')
// 1. 創(chuàng)建讀取流
var readStream = fs.createReadStream('./file2.txt')
// 2. 創(chuàng)建寫入流
var writeStream = fs.createWriteStream('./file_stream.txt')
// 3. 把讀取流通過管道傳給寫入流
readStream.pipe(writeStream)