我正在开发一个小型文档网站,内容存储在文件中。例如,我在chapter1.jade
目录中有两个文件chapter2.jade
和module1/
。
我想阅读module1/
目录并动态包含其中的所有chapterX.jade
个文件。
我试图做directory = fs.readDirSync('module1/')
,然后在我看来:
each item in directory
include item
但是jade include不支持动态值(即使`include#{item})也不起作用。你知道我怎么能实现这个吗?
编辑:我想在each
循环下生成一些代码(锚点以便于链接),因此解决方案最好在视图中。我显然可以在包含的文件中手动添加锚点,但这并不理想。
由于
答案 0 :(得分:1)
以下是我为使其发挥作用所做的简短版本。它使用jade Public API。
var directory = __dirname+'/views/bla/'
, files
, renderedHTML = '';
if( !fs.existsSync(directory) ) {
// directory doesn't exist, in my case I want a 404
return res.status(404).send('404 Not found');
}
// get files in the directory
files = fs.readdirSync(directory);
files.forEach(function(file) {
var template = jade.compile(fs.readFileSync(directory+file, 'utf8'));
// some templating
renderedHTML += '<section><a id="'+file+'" name="'+file+'" class="anchor"> </a>'+template()+'</section>';
});
// render the actual view and pass it the pre rendered views
res.render('view', {
title: 'View',
files: files,
html: renderedHTML
})
视图只是呈现未转义的html变量:
div(class="component-doc-wrap")
!{html}
答案 1 :(得分:0)
正如@ user1737909所说,用玉器是不可能的。
最好的方法(tho)是构建一个 Express Dynamic(查看)助手
在EXPRESS 3.XX中出现
答案 2 :(得分:0)
除了kalemas回答,您还可以将您的包含内容写入包含在玉器中的文件。
在这个例子中,我将include包含在include_all.jade中。该文件包含在玉文件中。
如果不起作用,请检查路径; - )
e.g。 在你的app.js
var includes = "path/to/include1\n";
includes += "path/to/include2";
...
incPath = "path/to/include_all.jade";
fs.open(incPath,'w',function(err,fd){
if(err){
throw 'error open file: ' + incPath +" "+ err;
}
var buffer = new Buffer(includes);
fs.write(fd,buffer,0,buffer.length,null,function(err){
if (err)
throw 'error writing file: ' +err;
fs.close(fd,function(){
console.log('file written ' + incPath);
});
});
});
在你的玉器文件中
include path/to/include_all.jade