Node筆記(2)

寫一個能夠生成多層級文件夾的函數css

const fs = require('fs');
const path = require('path');

function mkdirs (pathname,callback){
 
var root = path.dirname(module.parent.filename);
 
pathname = path.isAbsolute(pathname)?pathname:path.join(__dirname,pathname);
 
relativepath = path.relative(__dirname,pathname);
 
var folders = relativepath.split(path.sep);

try {
 
var pre = '';

folders.forEach(folder =>{
 
try {
//若是不存在則報錯
fs.statSync(path.join(__dirname,pre,folder));
} catch (error) {
fs.mkdirSync(path.join(__dirname,pre,folder));
}
pre = path.join(pre, folder);
});
 
callback && callback(null);
} catch (error) {
callback && callback(error);
}


}

module.exports = mkdirs;
 
 
寫一個讀取markdown而後轉換成html最終使用browsersync加載的服務器:
 
//markdown文件自動轉換
const fs = require('fs');
const path = require('path');
const marked = require('marked');
var browserSync = require("browser-sync");

//接受須要轉換的文件路徑
const target = path.join(__dirname,process.argv[2]||'../README.md');

var filename = target.replace(path.extname(target),'.html');

var indexpath = path.basename(filename);

// 經過browsersync建立文件服務器
browserSync({
server: path.dirname(target),
index:indexpath
});




//監視文件變化
fs.watchFile(target,{interval:200},(curr,prev)=>{

console.log(`current : ${curr.size} ; previous:${prev.size}`);
//判斷文件到底有沒有變化
 
if(curr.mtime == prev.mtime ){
return false;
}
//讀取文件,轉換爲新的HTML
fs.readFile(target,'utf8',(err,content)=>{
 
if(err)
{
throw err;
}
 
var html = marked(content);

fs.readFile(path.join(__dirname,'github.css'),'utf8',(err,css)=>{

html = template.replace('{{{content}}}',html).replace('{{{styles}}}',css);
 

fs.writeFile( filename ,html,'utf-8',(err)=>{

// 調用reload方法
browserSync.reload(indexpath);

console.log('UpdatedTime'+ new Date())});
 
});
});

});

var template = `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<style> {{{styles}}} </style>
</head>
<body>
<div>
 
{{{content}}}

</div>
</body>
</html>

`;
 
流的概念
--流是程序輸入或輸出的一個連續的字節序列
--文件流,網絡流
--設備輸入輸出都是用流來處理的
 
fs.createReadStream()
建立一個流的管子,將磁盤中數據與內存中的部分導通鏈接起來。。
// 建立文件的讀取流,並無讀出正式的數據,開始了讀取文件的任務()
(線程池中的處理。。)
 
 
// 建立文件的讀取流,並無讀出正式的數據,開始了讀取文件的任務()
var reader = fs.createReadStream('.\\1.iso');

reader.on('data',(chunk)=>{
//chunk是一個buffer(字節數組)

console.log('讀了一點'+chunk.length);
});

 //緩衝區存的就是一個字節數組html

 

 

文件流的方式操做只讀流git

 

//文件的複製
const fs = require('fs');
const path = require('path');

// 建立文件的讀取流,並無讀出正式的數據,開始了讀取文件的任務()
var reader = fs.createReadStream('.\\1.iso');

fs.stat('.\\1.iso',(err,stats)=>{
 
if(stats){


var readTotal = 0;

reader.on('data',(chunk)=>{
//chunk是一個buffer(字節數組)
 
console.log('讀了一點.進度'+(readTotal+=chunk.length)/stats.size * 100+'%');
 
});

}

});


文件流的寫入:
 

//文件的複製
const fs = require('fs');
const path = require('path');

// 建立文件的讀取流,並無讀出正式的數據,開始了讀取文件的任務()
var reader = fs.createReadStream('.\\1.iso');
// 建立一個寫入流
var writer = fs.createWriteStream('.\\2.iso');

fs.stat('.\\1.iso',(err,stats)=>{
 
if(stats){


var readTotal = 0;

reader.on('data',(chunk)=>{
//chunk是一個buffer(字節數組)
 
 

writer.write(chunk,(err)=>{

console.log('寫了一點.進度'+(readTotal+=chunk.length)/stats.size * 100+'%');

});
 
 
});

}

});


 

 

 pipe方法 
 
//文件的複製
const fs = require('fs');
const path = require('path');

// 建立文件的讀取流,並無讀出正式的數據,開始了讀取文件的任務()
var reader = fs.createReadStream('.\\1.iso');
// 建立一個寫入流
var writer = fs.createWriteStream('.\\2.iso');


//reader 讀取流
reader.pipe(writer);
 

Socket(傳輸層)github

 
 

 

 
HTTP(應用層)
//
超文本傳輸協議
 
 
 
瀏覽器的本質做用
 
1.將用戶輸入的URL封裝爲一個請求報文,
2.創建與服務器端的鏈接,
3.將封裝好的請求報文經過socket發送到服務器端,
server.write(JSON.stringify(send));
4.接收到服務端返回的響應報文,
5.解析響應報文JSON.parse,
6.渲染內容到頁面當中 console.log(msg)。
 
 
瀏覽器就是一個Socket客戶端
 
 
請求報文: 

 

響應報文:數組

相關文章
相關標籤/搜索