Node.js中有三類模塊:
內(nèi)置的Node.js模塊
第三方的Node.js模塊
自定義的Node.js模塊
下面記一記本人常用的nodejs內(nèi)置模塊:
http
http.createServer //注意:https服務(wù)需要證書
http.get(str,(res)=>{
let data =''
res.on('data',(chunk)=>{
data += chunk
})//獲取數(shù)據(jù)
res.on('end',()=>{
...
})//數(shù)據(jù)獲取結(jié)束進(jìn)行操作
})
url
該模塊用于處理瀏覽器返回的url字符串,常用方法如下:
url.parse(str,true,true)
//返回一個(gè)地址的解析對(duì)象,,str是地址,,
//第二個(gè)參數(shù)是query是否解析為對(duì)象,
//第三個(gè)參數(shù)是如果沒有域名,,對(duì)象中port,,host等參數(shù)是否可以正常解析
url.format(urlObj)
//對(duì)url進(jìn)行格式化,可以把parse產(chǎn)生的對(duì)象轉(zhuǎn)化為url格式
url.resolve('str1','str2')
//對(duì)兩個(gè)路徑進(jìn)行解析
querystring
常用方法如下:
querystring.parse(query)
//將字符串query解析為對(duì)象
querystring.stringfy(queryObj)
//將對(duì)象類型的query轉(zhuǎn)化為字符串
querystring.escape(query) //編碼
querystring.unescape(str) //解碼
fs
用于進(jìn)行文件操作,,主要方法如下:
//創(chuàng)建文件夾
fs.mkdir( '文件夾地址',ErrFn )
//創(chuàng)建文件
fs.writeFile(
'文件地址',
'寫入內(nèi)容',
//錯(cuò)誤優(yōu)先的回調(diào)函數(shù)
(err)=>{
if(err){
console.log(err.message)
}else{
console.log('文件創(chuàng)建成功')
}
}
)
//給文件追加內(nèi)容
fs.appendFile( '文件地址', '寫入內(nèi)容', ErrFn)
//讀取文件,,異步操作
fs.readFile(
'文件地址',
'utf-8',//如果不添加該參數(shù),data必須使用toString方法轉(zhuǎn)化為字符串形式,,否則輸出格式為Buffer
(err,data)=>{
if(err){
console.log(err.message)
}else{
console.log(data)
}
}
)
//同步讀取文件,,需要通過try-catch捕獲錯(cuò)誤
fs.readFileSync( '文件地址', 'utf-8' )
//刪除文件
fs.unlink( '文件地址', ErrFn)
//文件或者文件夾改名
fs.rename( '原文件夾名稱', '新名稱',ErrFn )
//刪除文件夾
fs.rmdir( '文件夾地址', ErrFn)
//讀取當(dāng)前以及內(nèi)部文件及文件夾信息
fs.readdir(
'./',
(err,data)=>{
data.forEach((value,index)=>{
fs.stat(`./${value}`,(err,stats)=>{
value//文件名稱
stats.size//文件大小
stats.isDirectory()//文件是文件還是文件夾
})
})
}
)
//fs的promiseAPI,,可以把方法作為promise看待,,后面可跟then方法
const fsP = require('fs').promises
//監(jiān)測(cè)文件變化,重命名和修改文件內(nèi)容都可以監(jiān)測(cè)到
fs.watch()
Stream
//讀取文件流
fs.creatReadStream('file地址')
//創(chuàng)建一個(gè)寫入流
fs.createWriteStream('file地址')
events
//使用事件:eventEmitter
class MyEventEmitter extends EventEmitter{}
const event = new MyEventEmitter()
event.on('fnName',()=>{})//定義一個(gè)事件
event.once('fnName',()=>{})//定義的事件只能被調(diào)用一次
event.emit('fnName','參數(shù)')//調(diào)用事件
2-常用的第三方模塊
1.nodemon :命令行工具,,用以輔助項(xiàng)目開發(fā),,可以實(shí)時(shí)js文件是否改動(dòng),如果有改動(dòng),,自動(dòng)重新編譯運(yùn)行 (npm install nodemon)
2.nrm : 下載地址切換工具
使用步驟:npm install nrm -g
nrm ls
nrm use 下載地址名稱
3.Gulp : 基于node開發(fā)的前端構(gòu)建工具
使用步驟:npm install gulp
在項(xiàng)目根目錄下建立gulpfile.js文件
重構(gòu)項(xiàng)目的文件夾結(jié)構(gòu),,src目錄存放源代碼文件,dist目錄放置構(gòu)建后文件
在gulpfile.js文件中編寫任務(wù)
gulp中提供的一些方法:gulp.src()獲取任務(wù)要處理的文件 ,gulp.dest()輸出文件 ,gulp.task()建立gulp任務(wù),gulp.watch()監(jiān)控文件的變化
安裝gulp命令行工具:npm install gulp-cli -g
gulp的一些常用插件:gulp-htmlmin(html文件壓縮),,gulp-file-include(公共文件包含),,gulp-csso(壓縮css),gulp-less(less語法轉(zhuǎn)換),,gulp-babel(JavaScript語法轉(zhuǎn)換),,gulp-uglify(壓縮混淆JavaScript)
3-如何創(chuàng)建一個(gè)服務(wù)器
4-http 搭建的服務(wù)相應(yīng)給客戶端的數(shù)據(jù)如果是中文,應(yīng)該如何處理
app.on('/',(req,res)=>{
res.writeHead(200,{
'content-type':'text/html;charset=utf8'
})
})
5-第三方 router 模塊和 serve-static 如何使用,,作用是什么,?
1.router
其功能是實(shí)現(xiàn)路由
使用方法:
獲取路由對(duì)象
調(diào)用路由對(duì)象創(chuàng)建路由
啟動(dòng)路由
使用代碼:
const getRouter = require('router')
const router = getRouter();
router.get('/index', (req, res) => {
res.end('Hello World!')
})
server.on('request', (req, res) => {
router(req, res, () => {})
})
2.sever-static
其主要功能是實(shí)現(xiàn)靜態(tài)資源的訪問
使用方法:
引入serve-static模塊獲取創(chuàng)建靜態(tài)資源服務(wù)功能的方法
調(diào)用方法創(chuàng)建靜態(tài)資源服務(wù)并指定靜態(tài)資源服務(wù)目錄
啟用靜態(tài)資源服務(wù)功能
使用代碼如下:
const serveStatic = require('serve-static')
const serve = serveStatic('public'); // public為靜態(tài)文件目錄地址
server.on('request', () => {
serve(req, res)
})