Javascript 如何根据请求编译jade,而不仅仅是服务器启动?
我希望在服务器上编译jade请求/响应,这样我就可以对jade文件进行更改并实时查看它,而不必每次都重新启动服务器。这是我到目前为止做的假模型Javascript 如何根据请求编译jade,而不仅仅是服务器启动?,javascript,node.js,pug,Javascript,Node.js,Pug,我希望在服务器上编译jade请求/响应,这样我就可以对jade文件进行更改并实时查看它,而不必每次都重新启动服务器。这是我到目前为止做的假模型 var http = require('http') , jade = require('jade') , path = __dirname + '/index.jade' , str = require('fs').readFileSync(path, 'utf8'); function onRequest(req, res)
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.');
我希望我说清楚了 服务器启动时,您只读取一次文件。如果您想让它读取更改,您必须根据请求读取,这意味着您的模型看起来更像:
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=jade.compile(str,{filename:path,pretty:true})代码>位于顶部,但仅在服务器启动时运行一次。因此,如果我要对我的jade模板进行更改,我必须手动停止并启动服务器以查看更改,这真的很烦人。我希望它在每次请求服务器时都使用该变量
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);
});
}