用node搭建簡單的靜態(tài)資源管理器

我們都知道猎莲,老牌的3p服務(wù)器都是自帶靜態(tài)資源管理器的。但是node不同技即,它沒有web容器益眉,它的路由地址和真實地址可以沒有聯(lián)系,所有node的優(yōu)點,是可以把路由做得相當漂亮郭脂。

但靜態(tài)資源管理器也是必不可少的東西年碘,今天我主要用node的fs模塊,自己手寫一個簡單的靜態(tài)資源管理器展鸡。

首先屿衅,建一個static文件夾,所有的靜態(tài)文件都將放到這個文件夾下


image.png

引包

var http = require("http");
var url = require("url");
var fs = require("fs");
var path = require("path");

path包是為了讀取文件的后綴名

var extname = path.extname(pathname);

用fs讀出文件

var http = require("http");
var url = require("url");
var fs = require("fs");
var path = require("path");
http.createServer(function(req,res) {
    //得到用戶路徑
    var pathname = url.parse(req.url).pathname;
    //判斷此時用戶輸入的是文件地址還是文件夾地址
    //如果是文件夾地址莹弊,那么自動請求文件夾中的index.html
    if(pathname.indexOf(".") == -1) {
        pathname = "index.html";
    }
    //拓展名
    var extname = path.extname(pathname);

    //把文件讀出來
    res.writeHead(200,{"Content-type":"text/html;charset=UTF-8"});
    fs.readFile("./static/"+pathname,function(err,data) {
        if(err) {
            //如果此文件不存在涤久,就因該用404返回
            fs.readFile("./static/404.html",function(err,data) {
                res.writeHead(404,{"Content-type":"text/html;charset=UTF-8"});
                res.end(data);
            });
            return;
            //res.end('<center>服務(wù)器傲嬌的向你拋出了一個404錯誤</center')
        };
        //MIME類型,就是
        //網(wǎng)頁文件:ttext/html
        //jpg文件:image/jpg
        getMime(extname,function(mime) {
            res.writeHead(200,{"Content-type":mime});
            res.end(data);
        });

    });

}).listen(3000,"127.0.0.1");
function getMime(extname,callback) {
    fs.readFile("./static/data.json",function(err,data) {       
        if(err) {
            throw Error("找不到data,json文件");
            return;
        }
        var data = JSON.parse(data);
        var mime = data[extname]||"text/plain";
        callback(mime);
    });
    /*switch(extname) {
        case:".html":
            return "text/html";
            break;
        case ".jpg" :
            return "image/jpg";
            break;  
        case ".css" :
            return "text/css";
            break;
    }*/
    
}

getMime()函數(shù)的作用是給不同類型的文件指定不同的content-type忍弛。這里我用了兩種方法响迂,一種是引入一個包含很多mime的json文件,另一種是直接列舉case語句细疚。

引入json的方法要復雜一下蔗彤。你要注意怎樣傳參和怎樣去設(shè)置回調(diào),來避免異步疯兼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末然遏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吧彪,更是在濱河造成了極大的恐慌待侵,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姨裸,死亡現(xiàn)場離奇詭異秧倾,居然都是意外死亡,警方通過查閱死者的電腦和手機傀缩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門中狂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扑毡,你說我怎么就攤上這事∈⑾眨” “怎么了瞄摊?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長苦掘。 經(jīng)常有香客問我换帜,道長,這世上最難降的妖魔是什么鹤啡? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任惯驼,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘祟牲。我一直安慰自己隙畜,他們只是感情好,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布说贝。 她就那樣靜靜地躺著议惰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乡恕。 梳的紋絲不亂的頭發(fā)上言询,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音傲宜,去河邊找鬼运杭。 笑死,一個胖子當著我的面吹牛函卒,可吹牛的內(nèi)容都是我干的辆憔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谆趾,長吁一口氣:“原來是場噩夢啊……” “哼躁愿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起沪蓬,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤彤钟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后跷叉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逸雹,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年云挟,在試婚紗的時候發(fā)現(xiàn)自己被綠了梆砸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡园欣,死狀恐怖帖世,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情沸枯,我是刑警寧澤日矫,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站绑榴,受9級特大地震影響哪轿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜翔怎,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一窃诉、第九天 我趴在偏房一處隱蔽的房頂上張望杨耙。 院中可真熱鬧,春花似錦飘痛、人聲如沸珊膜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辅搬。三九已至,卻和暖如春脖旱,著一層夾襖步出監(jiān)牢的瞬間堪遂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工萌庆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留溶褪,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓践险,卻偏偏與公主長得像猿妈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子巍虫,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理彭则,服務(wù)發(fā)現(xiàn),斷路器占遥,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 個人入門學習用筆記俯抖、不過多作為參考依據(jù)。如有錯誤歡迎斧正 目錄 簡書好像不支持錨點瓦胎、復制搜索(反正也是寫給我自己看...
    kirito_song閱讀 2,469評論 1 37
  • 前言 js是從網(wǎng)頁小腳本演變過來的芬萍,至今,前端的js庫搔啊,也不像一個真正的模塊柬祠。前端js經(jīng)歷了工具類庫、組件庫负芋、前端...
    白昔月閱讀 3,278評論 2 11
  • topics: 1.The Node.js philosophy 2.The reactor pattern 3....
    宮若石閱讀 1,078評論 0 1
  • Java的對象的序列化將那些實現(xiàn)了serializable接口的對象轉(zhuǎn)換成一個字節(jié)序列漫蛔,并能夠在以后將這個字節(jié)序列...
    少冰三hun甜閱讀 611評論 0 0