Node為一門(mén)后端語(yǔ)言(服務(wù)端器的程序語(yǔ)言)袁滥,能夠連接數(shù)據(jù)庫(kù)存取數(shù)據(jù)星虹,能夠接收和處理網(wǎng)絡(luò)請(qǐng)求(服務(wù)器的響應(yīng)零抬,發(fā)送請(qǐng)求去獲取數(shù)據(jù)),單線程事件驅(qū)動(dòng)宽涌,異步執(zhí)行平夜,不等待,提高IO(input和ouput)的處理速度和效率
一卸亮、事件驅(qū)動(dòng)
node本身提供了事件對(duì)象忽妒,幫助我們快速訂閱者模式,或者觀察者模式兼贸,或者事件模式段直。
//事件的訂閱
event.on('春節(jié)快到了',()=>{訂閱車(chē)票})
//事件的觸發(fā)
event.emit('春節(jié)快到了')
二寝受、讀寫(xiě)事件
fs.readFile('path',讀取配置,(err,data)=>{})
fs.writeFileSync('path',寫(xiě)入數(shù)據(jù),寫(xiě)入配置()=>{})
三坷牛、讀寫(xiě)的promise封裝
let fs = require("fs");
function fsRead(path){
return new Promise(function(resolve,reject){
fs.readFile(path,{flag:'r',encoding:'utf-8'},function(err,data){
if(err){
reject(err);
//失敗的回調(diào)
}else{
resolve(data);
//成功的回調(diào)
}
})
})
}
function fsWrit(path,contant){
return new Promise(function(resolve,reject){
fs.writeFile(path,contant,{flag:'a',encoding:'utf-8'},function(err){
if(err){
reject(err)
}else{
resolve(err);
console.log("寫(xiě)入成功")
}
})
})
}
function fsDir(path){
return new Promise(function(resolve,reject){
fs.mkdir(path,function(err){
if(err){
reject(err)
}else{
resolve("成功創(chuàng)建目錄")
}
})
})
}
module.exports = {
fsRead,
fsWrit,
fsDir
}
使用方式
(async function(){
let data await fsRead('path')
})()
四、網(wǎng)絡(luò)請(qǐng)求數(shù)據(jù)
request很澄,axios:效率較高,但是局限性比較大
puppeteer:效率較低,局限性比較小
重點(diǎn)需要的是:頁(yè)面的分析甩苛,數(shù)據(jù)存放的位置蹂楣,以及響應(yīng)內(nèi)容
五、網(wǎng)絡(luò)響應(yīng)數(shù)據(jù)
http.createServer:就可以創(chuàng)建一個(gè)服務(wù)器去監(jiān)聽(tīng)某個(gè)端口讯蒲,并且通過(guò)請(qǐng)求事件來(lái)處理每個(gè)發(fā)送過(guò)來(lái)的請(qǐng)求
server.on('request',(req,res)=>{
req:請(qǐng)求數(shù)據(jù)都會(huì)放在請(qǐng)求對(duì)象里
res:能夠做出響應(yīng)對(duì)象
})
六痊土、路由
根據(jù)不同的路徑去響應(yīng)不同的內(nèi)容
//循環(huán)匹配正則路徑
for(let key in this.reqEvent){
let regStr = key
let reg = new RegExp(regStr,'igs');
if(reg.test(req.url)){
this.reqEvent[key](req,res);
resState = true
break;
}
}
七、模板
會(huì)有一個(gè)固定的樣式和結(jié)構(gòu)的HTML模板墨林,根據(jù)請(qǐng)求的數(shù)據(jù)不同赁酝,顯示頁(yè)面內(nèi)容。例如新聞網(wǎng)站
function render(options,path) {
fs.readFile(path,{encoding:"utf-8",flag:"r"},(err,data)=>{
if(err){
console.log(err)
}else{
try{
data = replaceArr(data,options)
data = replaceVar(data,options)
}catch(error){
console.log(error)
}
this.end(data)
}
})
}