成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

HTTP文件瀏覽(靜態(tài)文件+express4.x+md/code文件渲染)

LiveVideoStack / 1455人閱讀

摘要:?jiǎn)栴}暴露之前做的瀏覽是使用版本做的,因?yàn)閰⒖紩容^舊了。方法可以將本地文件以靜態(tài)資源發(fā)送給用戶,所有問(wèn)題迎刃而解。舊版本不支持等代碼文件和文件在線查看,所以進(jìn)行改進(jìn)。利用和進(jìn)行響應(yīng)式布局。監(jiān)控文件,改變后無(wú)需重啟服務(wù)器。

問(wèn)題暴露

之前做的HTTP瀏覽是使用express2.x版本做的...,因?yàn)閰⒖紩容^舊了。

express2.x中沒(méi)有express4.x中的res.sendFile()方法,之前發(fā)送文件是使用的stream.pipe()方法,導(dǎo)致不支持繼續(xù)下載,而且用戶不能知道下載進(jìn)度,在線音樂(lè)視頻播放也不能選擇時(shí)間跳躍欣賞。res.sendFile()方法可以將本地文件以靜態(tài)資源發(fā)送給用戶,所有問(wèn)題迎刃而解。

舊版本不支持java/c/cpp/js/css/html等代碼文件和md/markdown文件在線查看,所以進(jìn)行改進(jìn)。

利用Bootstrap responsive utilsBootstrap grid system進(jìn)行響應(yīng)式布局。

監(jiān)控root.txt文件,改變r(jià)oot后無(wú)需重啟服務(wù)器。

去除對(duì)q.js依賴,使用原生Promise

效果預(yù)覽

json文件查看

md文件查看

html文件查看

代碼改進(jìn) root.txt文件監(jiān)控
//全局對(duì)象
global.root = fs.readFileSync("./root.txt").toString().split(/s+/)[0];
fs.watchFile("./root.txt",function () {
  //root.txt 文件修改后觸發(fā)
  global.root = fs.readFileSync("./root.txt").toString().split(/s+/)[0];
});
原生Promise
var statP = function(root,file){
    return new Promise(function(resolve){
      fs.stat(root+"/"+file,function (err, stats) {
        var t = {};
        if(err){
            t.reason=err;
            resolve(t);
        }
        else {
           t.state="ok";
           stats.name = file;
           stats.type = stats.isDirectory()?"文件夾":"文件";
           t.value=stats;
           resolve(t);
        }
      });
    })
};
Promise.all(files.map((x,i,a)=>{return statP(r,x);}))
    .then(function (results) {
        var values = [];
        results.forEach(x=>{
            if(x.state==="ok"){
                values.push(x.value);
            }else
                console.error(x.reason);
        });
        //...render
    },console.error);
sendFile方法使用
// noraw為url上的noraw參數(shù)值
if(!!noraw){
    // f為文件名
    if(f.match(/.(avi|mp4|mkv|rmvb|mpg|rm|wma)$/i)){
        res.render("video",o);
    }else if(f.match(/.(jpg|png|bmp|jpeg|gif)$/i)){
        res.render("img",o);
    }else if(f.match(/.(mp3|wma|aac)$/i)){
        res.render("audio",o);
    }else if(f.match(/.(md|markdown)$/i)){
        fs.readFile(file,(error,data) => {
            if(error) throw error;
            o.content = data.toString();
            res.render("md",o);
        });
    }else if(f.match(/.(java|c|cpp|js|css|jsp|php|json|txt)$/i)){
        fs.readFile(file,(error,data) => {
            if(error) throw error;
            // 在服務(wù)器渲染高亮代碼方法被淘汰,因?yàn)閷?duì)大文件調(diào)用下面方法十分耗時(shí)間,
            // 而node為單線程,所以其他用戶請(qǐng)求也會(huì)被阻塞,而且本用戶也要等待很久。
            // 所以選擇在瀏覽器端解析。
            // console.time("hl");
            // o.content=hl.highlightAuto(data.toString()).value;
            // console.timeEnd("hl");
            o.content = data.toString();
            res.render("code",o);
        });
    }else if(f.match(/.(html|htm)$/i)){
        fs.readFile(file,(error,data) => {
            if(error) throw error;
            o.content = data.toString();
            res.render("html",o);
        });
    }else{
        // rela 為相對(duì)路徑,root 為文件根目錄
        res.sendFile(rela,{root:global.root});
    }
}else{
    res.sendFile(rela,{root:global.root});
}
layout.jade
doctype
html(lang="zh")
  head
    title= title
    meta(name="renderer",content="webkit")
    meta(http-equiv="X-UA-Compatible",content="IE=edge")
    meta(name="viewport" content="width=device-width, initial-scale=1")
    link(rel="stylesheet", href="/stylesheets/bootstrap.min.css")
    link(rel="stylesheet", href="/stylesheets/style.css")
    link(rel="stylesheet", href="/stylesheets/hljs-github.min.css")
    link(rel="stylesheet", href="/stylesheets/pilcrow.css")
    link(rel="stylesheet", href="/stylesheets/github-markdown.css")
  body
    block content
code.jade
extends layout

block content
    script(src="http://cdn.bootcss.com/highlight.js/8.0/highlight.min.js")
    div.container-fluid
        h1=title
        include btns
        div.markdown-body
            pre
                code!=content
        script hljs.initHighlightingOnLoad();//自動(dòng)尋找
進(jìn)行解析 footer p.text-center.text-info Running on node with Express, Jade. By Moyu.
md.jade
//
   Created by Yc on 2016/6/9.
extends layout

block content
    script(src="http://cdn.bootcss.com/marked/0.3.5/marked.min.js")
    script(src="http://cdn.bootcss.com/highlight.js/8.0/highlight.min.js")
    div.container-fluid
        h1=title
        include btns
        div.row
            div.col-lg-6.visible-lg
                h2 解析前
                div.markdown-body
                    pre
                        code(id="markdown-raw")=content //"="會(huì)被轉(zhuǎn)義(如 < : <),"!="不會(huì)
            div.col-lg-6
                h2 解析后
                div.markdown-body(id="markdown-show")
        script(src="/javascripts/md.js")
        //renderer 來(lái)自md.js
        script document.getElementById("markdown-show").innerHTML = marked(document.getElementById("markdown-raw").innerText,{renderer:renderer});
        footer
            p.text-center.text-info Running on node with Express, Jade. By Moyu.
md.js
~function(){
    marked.setOptions({
        highlight: function (code) {
            return hljs.highlightAuto(code).value;
        }
    });
    renderer = new marked.Renderer();
    var map = {};
    //重寫默認(rèn)"#","##"... 格式的轉(zhuǎn)換方法
    renderer.heading = function (text, level) {//level 表示層級(jí),如#為1,##為2
        var escapedText = text.toLowerCase();
        // 防止出現(xiàn)重復(fù)的錨點(diǎn)
        if(!!map[text])
            escapedText+="-"+map[text]++;
        else
            map[text]=1;
        return "" +
            text + "";
    };
}();
問(wèn)題歸納

通過(guò)url的noraw控制展示方式,對(duì)SEO不友好
GitHub的解決方法是,在raw文件提供獨(dú)立的三級(jí)域名raw.githubusercontent.com/{username}/{repo}/{branch}/{file}

后期希望更加完善這個(gè)web應(yīng)用吧,比如在線查看壓縮文件等功能。

代碼地址

http-file-explorer-express4.x

參考資料

markdown-styles: 提供高大上的CSS樣式。

marked: 提供強(qiáng)大的markdown格式轉(zhuǎn)化API。

highlight.js: 提供強(qiáng)大的code格式轉(zhuǎn)化為具有class樣式的標(biāo)簽,方便用戶自定義樣式。

express4.x: express4.x詳細(xì)API文檔。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/86338.html

相關(guān)文章

  • WEB緩存探究第二彈——實(shí)戰(zhàn)

    摘要:前言緩存探究第一彈中我們講了一些緩存的基礎(chǔ)知識(shí)和策略。第二彈我們來(lái)講講如何實(shí)際在項(xiàng)目中配置。在緩存探究第一彈定制緩存策略中已經(jīng)提到對(duì)于最好標(biāo)記為不緩存,以便及時(shí)獲取最新的靜態(tài)資源版本。 前言 WEB緩存探究第一彈中我們講了一些WEB緩存的基礎(chǔ)知識(shí)和策略。第二彈我們來(lái)講講如何實(shí)際在項(xiàng)目中配置。 實(shí)戰(zhàn) 鑒于叉燒包本包是個(gè)前端,所以我們就以HTML和Node為例開(kāi)始showImg(https...

    linkin 評(píng)論0 收藏0
  • WEB緩存探究第二彈——實(shí)戰(zhàn)

    摘要:前言緩存探究第一彈中我們講了一些緩存的基礎(chǔ)知識(shí)和策略。第二彈我們來(lái)講講如何實(shí)際在項(xiàng)目中配置。在緩存探究第一彈定制緩存策略中已經(jīng)提到對(duì)于最好標(biāo)記為不緩存,以便及時(shí)獲取最新的靜態(tài)資源版本。 前言 WEB緩存探究第一彈中我們講了一些WEB緩存的基礎(chǔ)知識(shí)和策略。第二彈我們來(lái)講講如何實(shí)際在項(xiàng)目中配置。 實(shí)戰(zhàn) 鑒于叉燒包本包是個(gè)前端,所以我們就以HTML和Node為例開(kāi)始showImg(https...

    孫淑建 評(píng)論0 收藏0
  • WEB緩存探究第二彈——實(shí)戰(zhàn)

    摘要:前言緩存探究第一彈中我們講了一些緩存的基礎(chǔ)知識(shí)和策略。第二彈我們來(lái)講講如何實(shí)際在項(xiàng)目中配置。在緩存探究第一彈定制緩存策略中已經(jīng)提到對(duì)于最好標(biāo)記為不緩存,以便及時(shí)獲取最新的靜態(tài)資源版本。 前言 WEB緩存探究第一彈中我們講了一些WEB緩存的基礎(chǔ)知識(shí)和策略。第二彈我們來(lái)講講如何實(shí)際在項(xiàng)目中配置。 實(shí)戰(zhàn) 鑒于叉燒包本包是個(gè)前端,所以我們就以HTML和Node為例開(kāi)始showImg(https...

    waltr 評(píng)論0 收藏0
  • WEB緩存探究第二彈——實(shí)戰(zhàn)

    摘要:前言緩存探究第一彈中我們講了一些緩存的基礎(chǔ)知識(shí)和策略。第二彈我們來(lái)講講如何實(shí)際在項(xiàng)目中配置。在緩存探究第一彈定制緩存策略中已經(jīng)提到對(duì)于最好標(biāo)記為不緩存,以便及時(shí)獲取最新的靜態(tài)資源版本。 前言 WEB緩存探究第一彈中我們講了一些WEB緩存的基礎(chǔ)知識(shí)和策略。第二彈我們來(lái)講講如何實(shí)際在項(xiàng)目中配置。 實(shí)戰(zhàn) 鑒于叉燒包本包是個(gè)前端,所以我們就以HTML和Node為例開(kāi)始showImg(https...

    jcc 評(píng)論0 收藏0
  • NodeJs項(xiàng)目中的一些要點(diǎn)記錄

    摘要:前言學(xué)習(xí)也有一段時(shí)間了,踩過(guò)許多坑,在這里打算記錄一下自己覺(jué)得有用的點(diǎn),以備以后所需。代碼調(diào)試一般我們調(diào)試項(xiàng)目都是通過(guò)前端或者后端,這總是顯得不夠靈活。即使是內(nèi)置的也不夠友好。這樣修改文件時(shí)服務(wù)就會(huì)自動(dòng)重啟了。 前言 學(xué)習(xí)NodeJs也有一段時(shí)間了,踩過(guò)許多坑,在這里打算記錄一下自己覺(jué)得有用的點(diǎn),以備以后所需。 代碼調(diào)試 一般我們調(diào)試Js項(xiàng)目都是通過(guò)Alert()(前端)或者 Cons...

    superPershing 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<