我正在尝试使节点(或表达?我仍然是一个新手,所以我不知道哪一个在这里做实际工作)从多个文件夹呈现视图。如果我有一个登录页面,那么就有一个带索引的单独文件夹。用于登录的Ejs,以及用于登录的其他文件。对于我的主页,一个不同的文件夹,索引等…
我发现了这个链接,这是有帮助的https://strongloop.com/strongblog/bypassing-express-view-rendering-for-speed-and-modularity/但是他们给出了翡翠渲染引擎和marko的例子。我用的是ejs
,我试着用它们的例子,但是它们不起作用。例如:
我试了这个:
var templatePath = require.resolve('./template.jade');
var templateFn = require('jade').compileFile(templatePath);
app.get('/', function (req, res) {
res.write(templateFn({name: 'Frank'});
res.end();
});
但我用require('ejs')
代替了require('jade')
,但后来我在compileFile(templatePath)
上得到了一个错误:
undefined不是函数
我也用marko
试了另一个例子var templatePath = require.resolve('./template.marko');
var template = require('marko').load(templatePath);
app.get('/', function (req, res) {
template.render({name: 'Frank'}, res);
});
,但在load(templatePath)
上得到相同的错误。我不知道如何从根views
文件夹以外的位置使节点呈现视图
ejs
只有一个compile()
函数,它接受模板的字符串版本作为参数。因此,您需要首先手动从磁盘加载模板:
var fs = require('fs');
var templatePath = require.resolve('./template.ejs');
var template = require('ejs').compile(fs.readFileSync(templatePath, 'utf8'));
app.get('/', function (req, res) {
res.end(template({name: 'Frank'}));
});