f2e-server

模板的引用和包含

2014-12-25  本文已影响139人  云香水识

前端开发页面中经常会遇到公用HTML片段的情况,例如:整站页面都是用统一的头尾,这个要求一个我们的服务器至少应该提供一个基本的代码片段引用模式。

var rs = fs.createReadStream(pathname), str = "";
rs.on("error", function(err){  
    resp.writeHead(500, {"Content-Type": 'text/html'});
    resp.end( JSON.stringify(err) );  //出错时 服务端给出500的HTTP-code
}).on("data", function(d){  //data事件中拼接结果
    str += d;
}).on("end", function(){
    //TODO 这里获取str就是结果字符串
});
mime.isTXT = function(path){
    return /\b(text|xml|javascript|json)\b/.test( this.lookup(path) );
};

可以看出来,我们判断MIME类型字符串是否含有text|xml|javascript|json。我们只需要在end事件注册之前判断一下,只有是文本类型的时候才处理,否则仍然使用原来的管道转接。

if( mime.isTXT(pathname) ){
    rs.on("end",function(){ 
        str = require("./lib/handle.js").execute(str, root);  //将处理过程用一个新的模块实现
        resp.end( str );
    });
}else{
    rs.pipe(resp);
}
"use strict";
var fs = require("fs");
module.exports = {
    execute: function(str,root){
        var belong = "$[placeholder]";
        var h = /\$belong\[["\s]*([^"\s]+)["\s]*\]/.exec(str); 
        try{
            if(h){  //如果有belong关键字, 先处理: 所有路径关键字均使用从root起的绝对路径。
                belong = fs.readFileSync( root + "/" + h[1],'utf-8');   //读取belong文本
                str = str.replace(h[0], "" );           //替换关键字
                str = belong.replace("$[placeholder]",str);
            }
            return str.replace(/\$include\[["\s]*([^"\s]+)["\s]*\]/g, function(match, key){
                return fs.readFileSync( root + "/" + key,'utf-8');   //读取include文本
            });
            
        }catch(e){
            console.error(e);
            return str;
        }
    }
};
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <h2 style="text-align:center">我是header</h2>
    
<ul>
    <li>列表1</li>
    <li>列表2</li>
    <li>列表3</li>
    <li>列表4</li>
    <li>列表5</li>
    <li>列表6</li>
</ul>
</body>
</html>

PS:

相关完整代码已经发布到了npm仓库中, 可以使用 $npm install http-f2e-server@0.0.4 进行安装或者更新。进入目录后使用 $nodehttp-f2e-server.js` 启动服务,并查看Demo。

上一篇 下一篇

猜你喜欢

热点阅读