04、NodeJS-文件操作&網(wǎng)絡(luò)操作

NodeJS: https://github.com/nodejs/node/ 在github中想要查找某個文件,按t;
例如: 在使用fs.createWriteStream時,文檔中沒有具體方法,就可以通過查看源碼,通過源碼找對應(yīng)的構(gòu)造函數(shù)看有哪些屬性設(shè)置,查看原型有哪些方法可用;

npm中管理的包
$ npm ls // 該方式不方便查看(有太多子集)
$ npm ls --depth 0 // 即依賴子集為0
$ npm ls --depth 1 // 即依賴子集的第一層

nodemon:監(jiān)視您的node.js應(yīng)用程序的任何更改并自動重新啟動服務(wù)器
$ npm install -g nodemon
$ nodemon xxx.js // 運行對應(yīng)文件即可

一、文件監(jiān)視

  • fs.watchFile(filename[, options], listener(curr,prev))
  //  { persistent: true, interval: 5007 },即表示持續(xù)不斷監(jiān)視,時間間隔為5007毫秒
  options:{persistent,interval}

  const target = path.join(__dirname, process.argv[2]);
  fs.watchFile(target, (curr, prev)=>{
      console.log(`curr:${curr.size}; prev: ${prev.size}`);
});
 思路:
 - 利用fs模塊的文件監(jiān)視功能監(jiān)視指定MD文件
 - 當(dāng)文件發(fā)生變化后,借助marked包提供的markdown to html功能將改變后的MD文件轉(zhuǎn)換為HTML
 - 將得到的HTML替換到模版中(html = template.replace('{{content}}', html).replace('{{style}}', css);)
 - 利用BrowserSync模塊實現(xiàn)瀏覽器自動刷新 
 markdown的樣式有很多可以選擇,選取的不同,html結(jié)構(gòu)也會有所不同。
關(guān)于github.css主體內(nèi)容是包裹在div為.vs中:
<body>
    <div class='vs'>{{content}}</div>
</body>
  BrowserSync模塊的使用
    1、$ npm install browser-sync // 安裝browser-sync
    2、const browserSync = require("browser-sync");  // 導(dǎo)入模塊
    3、通過browserSync創(chuàng)建一個文件服務(wù)器
    browserSync({
            server: path.dirname(target),  // 文件服務(wù)器的目錄
            index:indexName // 在開啟服務(wù)器之后會打開頁面,該頁面作為網(wǎng)站根目錄
    });
    4、當(dāng)文件修改后,刷新瀏覽器頁面
    browserSync.reload(indexName);  // fileName是完整路徑

添加完BrowserSync后,就會在對應(yīng)目錄創(chuàng)建并啟動一個服務(wù)器,自動打開頁面(或手動打開,命令行有提示)http://192.168.1.112:3000 此時是在根目錄下,也可以具體訪問某個文件http://192.168.1.112:3000/xxx.html

二、文件流

  • 什么是流?
  - 流是程序輸入或輸出的一個連續(xù)的字節(jié)序列
  - 文件流、網(wǎng)絡(luò)流
  - 設(shè)備(例如鼠標(biāo)、鍵盤、磁盤、屏幕、調(diào)制解調(diào)器和打印機)的輸入和輸出都是用流來處理的
  • 文件流
  - 文件流就是以面向?qū)ο蟮母拍顚ξ募?shù)據(jù)進行的抽象
  - 文件流定義了一些對文件數(shù)據(jù)的操作方式
  • Node中的流操作
    • fs.createReadStream() 可讀流
  讀取流常用 API
  Event:data、end、error
  Method: read([size])、pause()、isPause()、resume()、
setEncoding(encoding)、pipe(destination[, options])、unpipe([destination])
  • fs.createWriteStream() 可寫流
  Event: error、pipe
  Method:write(chunk[, encoding][, callback])、end([chunk][, encoding][, callback])、setDefaultEncoding(encoding)

案例: 拷貝文件功能

fs-extra文件操作模塊 可以是拷貝、刪除、創(chuàng)建等操作

三、網(wǎng)絡(luò)操作

  • NET模塊
    在Node中socket通信的一種實現(xiàn)
    let server = net.createServer( (socket) => {  // 當(dāng)客戶端鏈接時,即會觸發(fā)
 
    // client有三個參數(shù): 端口號、IPV4/IPV6、ip
    var client = socket.address();
    // 或直接通過socket.remoteAddress / socket.remotePort 訪問到

    // 監(jiān)聽socket,網(wǎng)絡(luò)流
    socket.on('data', (chunk)=>{

    });
  } );

  // 綁定IP, 監(jiān)聽2017端口
  const port = 2017;
  // server.listen(options[, callback])
  // options { host: '192.168.1.100', port: 80}
  server.listen(port, (err) => {
    
  });
  // 為了方便操作,命令行方式鏈接服務(wù)端(使用telnet操作): $ telnet 192.168.1.100 2017

  // 簡便寫法
  // port 端口號, host IP地址
  // net.createServer(socketConneted).listen(port,  host, (err) => { });
  net.createServer(socketConneted).listen({port:port, host: host}, (err) => { });
  function socketConneted(socket){ ... }
  // 創(chuàng)建鏈接
  const client = net.connect({port: '2017', host:'192.168.1.100'}, ()=>{
    console.log('鏈接服務(wù)器成功');
    client.write('hello ??');
});
  
  // 監(jiān)聽到數(shù)據(jù)
  client.on('data', (chunk) => {
    console.log('接收到數(shù)據(jù):' + chunk.toString());
})
telnet
process.stdin.on('data', (chunk) => {
    // 轉(zhuǎn)成string類型,并且去掉前后空白
    console.log(chunk.toString().trim());
});

案例:簡易的聊天室

查看文檔是net(http和http是高度封裝的,net中更多了解socket通信是怎么的一個過程,如何的一個操作)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測試 ...
    KeKeMars閱讀 6,603評論 0 6
  • 個人入門學(xué)習(xí)用筆記、不過多作為參考依據(jù)。如有錯誤歡迎斧正 目錄 簡書好像不支持錨點、復(fù)制搜索(反正也是寫給我自己看...
    kirito_song閱讀 2,649評論 1 37
  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據(jù)使用者...
    保川閱讀 6,077評論 1 13
  • 使用 HTTP 服務(wù)器或客戶端功能必須調(diào)用require('http')。 Node 里的 HTTP 接口支持協(xié)議...
    保川閱讀 1,499評論 0 1
  • //公共引用 varfs =require('fs'), path =require('path'); 1、讀取文...
    才気莮孒閱讀 888評論 0 1

友情鏈接更多精彩內(nèi)容