我如何创建一个包含Express&中所有.html模板的.js文件Node.js的?

时间:2011-03-22 14:02:02

标签: javascript file node.js jquery-templates express

我在服务器端和客户端都使用jquery模板。我在服务器上使用Node.js上的jqtpl和express模块​​,我有jquery及其客户端的模板插件。

客户端尽可能接收JSON而不是html,并构建模板本身,使用HTML5历史API来更改URL并允许会话导航。如果这是不可能的,服务器会执行模板化并发送html。

服务器和客户端都具有完全相同的模板,但服务器以12 .html文件的形式存在它们,客户端以.js文件中的对象形式存在它们。

每次我更改或添加模板时,我都必须将客户端.js文件更改为相同,这有点痛苦。

我想要做的是让.js文件动态获取我的templates文件夹中的所有.html文件,并将它们编译成一个对象。完成开发后,此文件将被缓存,因为它不再需要查找更改。

2 个答案:

答案 0 :(得分:0)

不确定这是否能回答您的问题,但如果您对在客户端和服务器上使用相同的模板代码感兴趣,则应该查看weld,这样您就可以使用相同的代码客户端和服务器。

关于12个html文件与客户端上的1个对象有什么关系,你能不能更清楚一点?

如果可能,代码示例会摇摆不定。

答案 1 :(得分:0)

我在寻找的是Node的文件系统模块:

http://nodejs.org/docs/v0.4.8/api/fs.html

我使用fs.readdir查找文件夹中的所有模板文件,然后遍历生成的数组以读取其包含的所有文件。

var templates = {};
fs.readdir("./templates", function(err, files) {
    for(var i = 0, len = files.length; i<len; i++) {
        fs.readFile("./templates/" + files[i], function (err, data) {
            if (err) {
                throw err
            }
            templates[files[i]] = data;
        });
    }
}

然后在快递中:

app.get("/templates.js", function(req, res){
    res.header("Content-Type", "text/javascript");
    res.end("var templates = { " + JSON.stringify(templates) + " }; ");
});

但是,我发现服务器端模板更适合我的需求,并且在适当的情况下,我现在在我的JSON响应中发送呈现的HTML而不仅仅是数据。