node.js系列(實例):原生node.js實現靜態資源管理

 1 /**
 2  * node入門之綜合案例(一):簡易路由
 3  * @Author : by Ghost
 4  * @Date : 2016/07/11
 5  * @Description :
 6  * 一、引入如下模塊
 7  * http模塊:建立服務器,處理請求和相應
 8  * URL模塊:解析url請求地址
 9  * fs模塊:讀取文件
10  * path模塊:處理文件路徑,獲取文件後綴名,路徑優化
11  *
12  * 二、使用http.createServer()方法建立服務器
13  * 三、使用url.parse()方法解析瀏覽器請求路徑
14  * 四、使用fs.readFile()方法讀取對應的靜態文件
15  * 五、使用path.extname()方法獲取文件後綴名
16  * 六、設置MIME類型,實現文件兼容
17  * */
18 
19 //引入模塊
20 var http = require('http');
21 var url = require('url');
22 var fs = require('fs');
23 var path = require('path');
24 
25 //建立服務器,監聽3000端口
26 var server = http.createServer(function (req, res) {
27     //屏蔽/favicon.ico的請求
28     if(req.url === '/favicon.ico')
29     {
30         return ;
31     };
32 
33     //解析請求路徑
34     var pathname = url.parse(req.url).pathname;
35 
36     //默認首頁
37     if(pathname.indexOf('.') === -1)
38     {
39         pathname = "/index.html"
40     };
41 
42     //獲取文件後綴名
43     var extname = path.extname(pathname);
44 
45     //讀取文件
46     fs.readFile('./static/' + pathname, function (err,data) {
47         //若是出錯則表示請求路徑不正確,顯示404
48         if(err){
49             fs.readFile("./static/404.html",function(err,data){
50                 res.writeHead(404,{"Content-Type":"text/html;charset=UTF-8"});
51                 res.end(data);
52             });
53             return;
54         };
55 
56         //讀取數據
57         //結束響應
58         getMime(extname,function(mime){
59             res.writeHead(200,{"Content-Type": mime});
60             res.end(data);
61         });
62     });
63 });
64 
65 //設置監聽端口
66 server.listen(3000,'127.0.0.1', function () {
67     console.log("server is started listen port 3000");
68 });
69 
70 //getMIME()
71 function getMime(extname,callback)
72 {
73     fs.readFile('./static/mime.json', function (err,data) {
74         if(err)
75         {
76             throw Error("找不到mime.json文件");
77             return;
78         };
79         var mimeJson = JSON.parse(data);
80         var mime = mimeJson[extname] || "text/plain";
81         //執行回調函數,結束異步問題
82         callback(mime);
83     });
84 }
相關文章
相關標籤/搜索