国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Node.js創建HTTP文件服務器的使用示例

2024-05-06 15:34:23
字體:
來源:轉載
供稿:網友

HelloWorld示例只有演示意義,這次我們來搞一個實際的例子:文件服務器。我們使用Node.js創建一個HTTP協議的文件服務器,你可以使用瀏覽器或其它下載工具到文件服務器上下載文件。

為了讀取文件,我們會用到File System模塊(名字是”fs”),Stream,我們還要分析URL,區別HTTP方法,還會用到EventEmitter。

文件服務器FileServer的代碼

先上代碼吧,依然是簡單的:

// 引入http模塊var http = require("http"); var fs = require("fs");// 創建server,指定處理客戶端請求的函數http.createServer(  function(request, response) {    //判斷HTTP方法,只處理GET     if(request.method != "GET"){      response.writeHead(403);      response.end();      return null;    }    //此處也可使用URL模塊來分析URL(https://nodejs.org/api/url.html)    var sep = request.url.indexOf('?');    var filePath = sep < 0 ? request.url : request.url.slice(0, sep);    console.log("GET file: " + filePath);    //當文件存在時發送數據給客戶端,否則404    var fileStat = fs.stat("."+filePath,       function(err, stats){        if(err) {          response.writeHead(404);          response.end();          return null;        }        //TODO:Content-Type應該根據文件類型設置        response.writeHead(200, {"Content-Type": "text/plain", "Content-Length": stats.size});        //使用Stream        var stream = fs.createReadStream("."+filePath);        stream.on('data',function(chunk){          response.write(chunk);        });        stream.on('end',function(){          response.end();        });        stream.on('error',function(){          response.end();        });      }    );  }).listen(8000); console.log("Hello World start listen on port 8000");

最大的變化,就在傳遞給createServer方法的參數了。

我們根據request.method作了判斷,不是GET就返回403。如果是呢,就判斷文件是否存在,不存在,返回404,存在就讀取數據寫給客戶端。邏輯就是這么簡單。下面我們來介紹用到的新知識。

File System

要使用FileSystem,得用require引入fs模塊,就如前面代碼里那樣。File System的API老長老長了,看這里吧:https://nodejs.org/api/fs.html。我們只說用到的特性。

獲取文件狀態

在我們的FileServer里,收到和客戶端請求時先通過fs.stat()方法獲取文件狀態。fs.stat()方法原型如下:

fs.stat(path, callback)

第一個參數是文件路徑,第二個參數是回調函數。fs.stat()方法是異步的,結果通過回調函數callback返回。callback的原型如下:

function(err, stats)

第一個參數指示是否出現了錯誤,第二個參數是一個對象,類型是fs.Stats,保存了文件的狀態信息,比如大小、創建時間、修改時間等。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 呼图壁县| 辽宁省| 侯马市| 屏东市| 绥宁县| 凌海市| 和林格尔县| 米脂县| 历史| 临江市| 大同市| 鄄城县| 宜州市| 石泉县| 丰都县| 古蔺县| 洮南市| 榕江县| 龙门县| 彭山县| 高阳县| 遵义市| 锡林浩特市| 辽宁省| 吉安市| 瑞丽市| 梨树县| 成武县| 电白县| 阳东县| 巧家县| 囊谦县| 洛浦县| 葵青区| 台湾省| 庆元县| 武定县| 共和县| 蕲春县| 墨玉县| 吉木萨尔县|