<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關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題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
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        NodeJS學習筆記之FS文件模塊_node.js

        來源:懂視網 責編:小采 時間:2020-11-27 21:31:53
        文檔

        NodeJS學習筆記之FS文件模塊_node.js

        NodeJS學習筆記之FS文件模塊_node.js:一,開篇分析 文件系統模塊是一個簡單包裝的標準 POSIX 文件 I/O 操作方法集。可以通過調用 require(fs) 來獲取該模塊。文件系統模塊中的所有方法均有異步和同步版本。 (1),文件系統模塊中的異步方法需要一個完成時的回調函數作為最后一個傳入形參。 (
        推薦度:
        導讀NodeJS學習筆記之FS文件模塊_node.js:一,開篇分析 文件系統模塊是一個簡單包裝的標準 POSIX 文件 I/O 操作方法集。可以通過調用 require(fs) 來獲取該模塊。文件系統模塊中的所有方法均有異步和同步版本。 (1),文件系統模塊中的異步方法需要一個完成時的回調函數作為最后一個傳入形參。 (
        一,開篇分析

        文件系統模塊是一個簡單包裝的標準 POSIX 文件 I/O 操作方法集。可以通過調用 require("fs") 來獲取該模塊。文件系統模塊中的所有方法均有異步和同步版本。

        (1),文件系統模塊中的異步方法需要一個完成時的回調函數作為最后一個傳入形參。

        (2),回調函數的構成由調用的異步方法所決定,通常情況下回調函數的第一個形參為返回的錯誤信息。

        (3),如果異步操作執行正確并返回,該錯誤形參則為null或者undefined。如果使用的是同步版本的操作方法,一旦出現錯誤,會以通常的拋出錯誤的形式返回錯誤。

        (4),可以用try和catch等語句來攔截錯誤并使程序繼續進行。

        我們先看一個簡單的例子,讀取文件("bb.txt"):

        (1),建立文件"bb.txt“,如下內容(”大家好,我是大雄君!(*^__^*) 嘻嘻……“)。

        (2),讀取文件操作如下代碼:

        代碼如下:
        var fs = require("fs") ;
        fs.readFile("bb.txt","utf8",function (error,data){
        if(error) throw error ;
        console.log(data) ;
        }) ;

        運行結果:

        這里要注意的是:讀取文件一定要設置編碼,否則默認是 ”buffer“ 形式出現。

        再看沒設置的運行效果,區別還是很明顯的。如下:

        再來一個寫操作,如下:

        代碼如下:
        var fs = require("fs") ;
        var txt = "大家要好好學習NodeJS啊!!!" ;
        //寫入文件
        fs.writeFile("bb.txt",txt,function (err) {
        if (err) throw err ;
        console.log("File Saved !"); //文件被保存
        }) ;

        運行結果:

        在列舉一些常用的實例:

        代碼如下:
        // 刪除文件
        fs.unlink('bb.txt', function(){
        console.log('success') ;
        }) ;
        // 修改文件名稱
        fs.rename('bb.txt','bigbear.txt',function(err){
        console.log('rename success') ;
        });
        // 查看文件狀態
        fs.stat('bb.txt', function(err, stat){
        console.log(stat);
        });
        // 判斷文件是否存在
        fs.exists('bb.txt', function( exists ){
        console.log( exists ) ;
        }) ;

        二,Fs與Stream之間的聯系

        "Stream" 具有異步的特性。我么可以將一個文件或一段內容分為未知個制定大小的 "chunk" 去讀取,每讀取到一個 "chunk" 我們就將他輸出。直到文件讀完。這就像 "http1.1" 種支持的 "Transfer-Encoding: chunked" 那樣。 ("chunk"可以以任何的形式存在,NodeJS默認是以 "Buffer" 的形式存在,這樣更高效)。NodeJS中的"Stream"具備Unix系統上的一個超級特性就是 ("pipe" ------ 管道)。

        還記得 “Http模塊那篇” 第一個NodeJS程序, "Hello,大熊!" 嗎?我們基于那個小程序做一下修改,如下代碼:

        (1),建立“bb.html”

        代碼如下:





        Hello,大熊!


        (2),修改之前的程序如下:

        代碼如下:
        var http = require('http') ;
        var fs = require("fs") ;
        var server = http.createServer(function(req,res){
        fs.readFile("bb.html","utf-8", function(err, data){
        if(err) {
        res.writeHead(500, {'Context-Type': 'text/plain'});
        res.end('specify file not exists! or server error!');
        }
        else{
        res.writeHead(200, {'Context-Type': 'text/html'});
        res.write(data);
        res.end();
        }
        })
        }) ;
        server.listen(8888) ;
        console.log("http server running on port 8888 ...") ;

        以下是運行結果:

        現在我們需要思考一下,如果我們要發送的不是一個單純的文本文件而是超媒體文件比如說 Google 2014 IO 大會 的全程高清視頻文件。mp4 格式。長度2個多小時1080p。

        大概4個多GB。已知 "readFile" 的工作方式是將文件讀取到內存。那么這么大一個文件顯然是不能這么做的。那該怎么辦呢?是之后就需要使用 stream 的來做。那么是這樣的。

        代碼如下像這樣:

        代碼如下:
        fs.createReadStream(__dirname + '/vedio.mp4').pipe(res) ;

        總結一下:

        這些代碼可以實現需要的功能,但是服務在發送文件數據之前需要緩存整個文件數據到內存,如果"bb.html"文件很
        大并且并發量很大的話,會浪費很多內存。因為用戶需要等到整個文件緩存到內存才能接受的文件數據,這樣導致
        用戶體驗相當不好。不過還好 "(req, res)" 兩個參數都是Stream,這樣我們可以用fs.createReadStream()代替"fs.readFile()"。

        三,實例

        來一個文件上傳的小栗子:

        (1),建立“server.js”

        代碼如下:
        var http = require('http');
        var url = require('url');
        function start(route, handler) {
        function onRequest (request, response) {
        var pathname = url.parse(request.url).pathname;
        // 路由到相應的業務邏輯
        route (pathname, handler, response, request);
        }
        http.createServer(onRequest).listen(3000);
        console.log('server is starting');
        }
        exports.start = start;

        (2),建立“route.js”

        代碼如下:
        function route (pathname, handler, response, request) {
        console.log('about to route a request for ' + pathname);
        if (typeof handler[pathname] === 'function') {
        return handler[pathname](response, request);
        } else {
        console.log('no request handler found for ' + pathname);
        response.writeHead(404, {'Content-Type': 'text/html'});
        response.write('404 Not Found!');
        response.end();
        }
        }
        exports.route = route;

        (3),建立“requestHandler.js”

        代碼如下:
        var querystring = require('querystring'),
        fs = require('fs'),
        formidable = require('formidable');
        function start (response, request) {
        console.log('start module');
        var body = ''+
        ''+
        ' 'content="text/html; charset=UTF-8" />'+
        ''+
        ''+
        ''+
        ''+
        '';
        response.writeHead(200, {'Content-Type': 'text/html'});
        response.write(body);
        response.end();
        }
        function upload (response, request) {
        console.log('upload module');
        var form = new formidable.IncomingForm();
        form.parse(request, function (error, fields, files) {
        fs.renameSync(files.upload.path, '/tmp/test.png');
        response.writeHead(200, {'Content-Type': 'text/html'});
        response.write('You\'ve sent:
        ');
        response.write('');
        response.end();
        });
        }
        function show (response, request) {
        console.log('show module');
        fs.readFile ('/tmp/test.png', 'binary', function (error, file) {
        if (error) {
        response.writeHead(200, {'Content-Type': 'text/html'});
        response.write(error);
        response.end();
        } else {
        response.writeHead(200, {'Content-Type': 'image/png'});
        response.write(file, 'binary');
        response.end();
        }
        });
        }
        exports.start = start;
        exports.upload = upload;
        exports.show= show;

        (4),建立“index.js”

        代碼如下:
        var server = require('./server');
        var router = require('./router');
        var requestHandler = require('./requestHandler');
        var formidable = require('formidable'); // require路徑搜索算法??
        var handler = {};
        handler['/'] = requestHandler.start;
        handler['/start'] = requestHandler.start;
        handler['/upload'] = requestHandler.upload;
        handler['https://www.gxlcms.com/show'] = requestHandler.show;
        server.start(router.route, handler);

        四,總結一下

        (1),理解 "Fs與Stream之間的聯系" 。
        (2),熟練使用 "FS" 相關的api。
        (3),注意細節的把控,比如: 文件操作api同步方式與異步方式之間的處理細節。
        (4),最后強調:理解文件上傳例子中的代碼組織方式,不斷重構,不斷總結。

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

        文檔

        NodeJS學習筆記之FS文件模塊_node.js

        NodeJS學習筆記之FS文件模塊_node.js:一,開篇分析 文件系統模塊是一個簡單包裝的標準 POSIX 文件 I/O 操作方法集。可以通過調用 require(fs) 來獲取該模塊。文件系統模塊中的所有方法均有異步和同步版本。 (1),文件系統模塊中的異步方法需要一個完成時的回調函數作為最后一個傳入形參。 (
        推薦度:
        標簽: 文件 js 模塊
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 午夜神器成在线人成在线人免费| 51在线视频免费观看视频| 国产gav成人免费播放视频| 青青青亚洲精品国产| 午夜无遮挡羞羞漫画免费| 亚洲精品无码久久久久久| 夭天干天天做天天免费看| 亚洲a无码综合a国产av中文| 免费大黄网站在线观看| 久久成人永久免费播放| 国内精品99亚洲免费高清| a国产成人免费视频| 久久久无码精品亚洲日韩京东传媒 | 最近免费中文在线视频| 亚洲精品在线播放视频| 国产一精品一AV一免费孕妇 | 亚洲成年人在线观看| 18禁免费无码无遮挡不卡网站| 亚洲一卡2卡3卡4卡5卡6卡| 国产成人aaa在线视频免费观看| 免费看又黄又爽又猛的视频软件| 国产亚洲成av人片在线观看| 四虎1515hh永久久免费| 亚洲AV无码国产一区二区三区| 毛茸茸bbw亚洲人| 久久国产色AV免费观看| 亚洲第一男人天堂| 中文字幕中韩乱码亚洲大片| 四虎在线最新永久免费| 美女被免费网站在线视频免费| 亚洲精品自在在线观看| 在线看片无码永久免费视频| 一级毛片在播放免费| 亚洲欧洲中文日产| 亚洲乱码日产精品a级毛片久久| 日韩免费视频一区二区| 亚洲AV成人精品一区二区三区| 亚洲人成人网站色www| 午夜两性色视频免费网站| 在线观看免费无码视频| 成全视频免费观看在线看|