<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        淺析Node.js的Stream模塊中的Readable對象_node.js

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 21:41:13
        文檔

        淺析Node.js的Stream模塊中的Readable對象_node.js

        淺析Node.js的Stream模塊中的Readable對象_node.js:我一直都很不愿意扯 nodejs 的流,因為從第一次看到它我就覺得它的設(shè)計實在是太惡心了。但是沒辦法,Stream 規(guī)范尚未普及,而且確實有很多東西都依賴了 nodejs 的流來實現(xiàn)的,所以我也只能捏著鼻子硬著頭皮來扯一扯這又臭又硬的 nodejs 流對象了。 no
        推薦度:
        導(dǎo)讀淺析Node.js的Stream模塊中的Readable對象_node.js:我一直都很不愿意扯 nodejs 的流,因為從第一次看到它我就覺得它的設(shè)計實在是太惡心了。但是沒辦法,Stream 規(guī)范尚未普及,而且確實有很多東西都依賴了 nodejs 的流來實現(xiàn)的,所以我也只能捏著鼻子硬著頭皮來扯一扯這又臭又硬的 nodejs 流對象了。 no

        我一直都很不愿意扯 nodejs 的流,因為從第一次看到它我就覺得它的設(shè)計實在是太惡心了。但是沒辦法,Stream 規(guī)范尚未普及,而且確實有很多東西都依賴了 nodejs 的流來實現(xiàn)的,所以我也只能捏著鼻子硬著頭皮來扯一扯這又臭又硬的 nodejs 流對象了。
          nodejs 自帶了一個叫 stream 的模塊,引入它便可以得到一組流對象構(gòu)造器。現(xiàn)在我只說最簡單的 stream.Readable。
          其實用過 nodejs 的幾乎都接觸過 Readable 的實例,只是平時沒太在意而已。一個非常典型的例子,http 模塊中我們處理每個請求時都會有 req 和 res 對象,req 其實就是一個 Readable 對象。我們可以在這個 req 上以流的形式讀到 HTTP 請求的實體部分。
          那么問題來了,為什么 http 模塊要在此處以流的方式設(shè)計呢?或者從另一個維度來問這個問題就是「nodejs 如果獲取 POST 請求的內(nèi)容?」。懂得用搜索引擎的同學(xué)肯定可以很容易地找到這么一個答案:監(jiān)聽 data 事件收集數(shù)據(jù),在 end 事件中把收集到的數(shù)據(jù)合并起來。是的,這是解決這個問題的方法。但是為什么它如此設(shè)計呢?像 PHP 那樣直接就可以取到 POST 內(nèi)容多好?其實這么設(shè)計是有好處的,如果我們接收到的數(shù)據(jù)是非法的,我可以馬上察覺,然后響應(yīng)并斷開連接。這樣可以避免一些不必要的傳輸成本。比如上傳圖片,也許用戶錯誤地選擇了一個很大的可執(zhí)行文件,我們不需要等到這個文件完全上傳完畢,只要一個文件頭部的若干字節(jié)就能判斷一個文件是否是圖片了。此處使用流的設(shè)計就可以先讀出前面的幾個字節(jié)來使用。
          上面提到的 data 事件和 end 事件都是 Readable 的事件,這兩個事件分別表示收到數(shù)據(jù)和數(shù)據(jù)接收完畢。所以其實我們早已知道了 Readable 的用法,只是很多人不知道它是 Readable 對象而已。
          但是上面這兩個事件僅僅是對 Readable 的消費者而言的事件。內(nèi)部是如何把一個數(shù)據(jù)推送到 Readable 對象里面讓 Readable 觸發(fā)出這些事件的呢?那么它就是 push 方法。下面是一個例子,它創(chuàng)建了一個 Readable 對象,這個對象會流出一個遞增的數(shù)字(這里使用了 babel-node)

          如果仔細(xì)看上面代碼就會發(fā)現(xiàn)一個很神奇的地方,這個代碼覆寫了 _read 方法,這是什么鬼?其實我也覺得這是個坑,這個私有命名風(fēng)格就不吐槽了,為何非要覆寫這個方法才算實現(xiàn)它?如果沒有覆寫這個方法,那么在調(diào)用 push 時將拋出異常:

         Error: not implemented
         at Readable._read (_stream_readable.js:464:22)
         at Readable.read (_stream_readable.js:341:10)
        

          以上這些便是 Readable 對象的基本用法。但是還有更多坑會踩到,這篇文章只是一個最簡單的介紹,讓大家學(xué)會如何造出一個能輸出數(shù)據(jù)的 Readable 對象而已。至于一些 read 之類的基本方法,反正這些也是不科學(xué)的設(shè)計之一。

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        淺析Node.js的Stream模塊中的Readable對象_node.js

        淺析Node.js的Stream模塊中的Readable對象_node.js:我一直都很不愿意扯 nodejs 的流,因為從第一次看到它我就覺得它的設(shè)計實在是太惡心了。但是沒辦法,Stream 規(guī)范尚未普及,而且確實有很多東西都依賴了 nodejs 的流來實現(xiàn)的,所以我也只能捏著鼻子硬著頭皮來扯一扯這又臭又硬的 nodejs 流對象了。 no
        推薦度:
        標(biāo)簽: 淺析 node.js stream
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲美女色在线欧洲美女| 亚洲一区无码中文字幕| 亚洲精品视频在线免费| 无码国产精品一区二区免费16| 人人狠狠综合久久亚洲婷婷| 男人天堂免费视频| 亚洲日本在线观看| 国产在线jyzzjyzz免费麻豆| 亚洲国产中文在线视频| 麻豆最新国产剧情AV原创免费| 精品日韩99亚洲的在线发布| 四虎成人免费观看在线网址 | 亚洲av综合av一区二区三区| 成人毛片免费观看视频在线| 亚洲成a∨人片在无码2023| 日韩免费一区二区三区| h在线看免费视频网站男男| 亚洲中文字幕无码一区二区三区| 男人天堂免费视频| 亚洲视频免费一区| 成年女人毛片免费视频| 人人鲁免费播放视频人人香蕉| 在线观看亚洲天天一三视| 99久久久国产精品免费蜜臀| 亚洲精品二三区伊人久久| 四虎成人精品在永久免费| 岛国岛国免费V片在线观看| 亚洲色偷偷偷网站色偷一区| 四虎成人免费网址在线| 免费一级全黄少妇性色生活片| 久久国产亚洲电影天堂| 成年女人午夜毛片免费看| 一级毛片免费在线| 亚洲福利视频一区二区三区| 尤物永久免费AV无码网站| 日韩精品无码免费专区午夜| 中文字幕精品三区无码亚洲| 亚洲中文字幕在线观看| 成人免费视频观看无遮挡| 99精品全国免费观看视频..| 亚洲人成网站999久久久综合|