【问题标题】:How do I compile jade on request rather than just server start?我如何根据请求编译翡翠,而不仅仅是服务器启动?
【发布时间】:2013-04-03 02:27:38
【问题描述】:

我希望在服务器请求/响应上编译我的翡翠,这样我就可以对翡翠文件进行更改并实时查看它,而不必每次都重新启动服务器。这是我目前拥有的假模型。

var http = require('http')
  , jade = require('jade')
  , path = __dirname + '/index.jade'
  , str  = require('fs').readFileSync(path, 'utf8');


    function onRequest(req, res) {
        req({
            var fn   = jade.compile(str, { filename: path, pretty: true});
        });
        res.writeHead(200, {
            "Content-Type": "text/html"
        });

        res.write(fn());
        res.end();
    }

http.createServer(onRequest).listen(4000);
console.log('Server started.');

我希望我说清楚了!

【问题讨论】:

  • 这个问题到底是什么?你的方法看起来很有希望......
  • 最初我在顶部有var fn = jade.compile(str, { filename: path, pretty: true});,但它只在服务器启动时运行一次。因此,如果我要对我的翡翠模板进行更改,我必须手动停止并启动服务器才能看到更改,这真的很烦人。我希望它在每次请求服务器时都生成该变量

标签: javascript node.js pug


【解决方案1】:

您只在服务器启动时读取文件一次。如果您想让它读取更改,则必须根据要求阅读它,这意味着您的模型看起来更像:

function onRequest(req, res) {
    res.writeHead(200, {
        "Content-Type": "text/html"
    });

    fs.readFile(path, 'utf8', function (err, str) {
        var fn = jade.compile(str, { filename: path, pretty: true});
        res.write(fn());
        res.end();
    });
}

这样的东西每次都会读取文件,这对于开发目的来说可能没问题,但是如果您只是想在发生更改时重新加载/处理文件,您可以使用文件观察器( fs.watch 可能符合这个要求)。

类似这样的东西(只是一个未经测试的例子):

var fn;

// Clear the fn when the file is changed
// (I don't have much experience with `watch`, so you might want to 
// respond differently depending on the event triggered)
fs.watch(path, function (event) {
    fn = null;
});

function onRequest(req, res) {
    res.writeHead(200, {
        "Content-Type": "text/html"
    });

    var end = function (tmpl) {
      res.write(tmpl());
      res.end();
    };

    if (fn) return end(fn);

    fs.readFile(path, 'utf8', function (err, str) {
        fn = jade.compile(str, { filename: path, pretty: true});
        end(fn);
    });
}

【讨论】:

    猜你喜欢
    • 2015-05-29
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    相关资源
    最近更新 更多