节点多视图文件夹

时间:2015-08-21 04:20:38

标签: javascript node.js

我试图创建节点(或表达?我仍然是一个菜鸟,所以我不知道哪些是在这里做实际的工作)从多个文件夹渲染视图。因此,如果我有一个登录页面,那么有一个单独的文件夹,其中index.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('jade')替换为require('ejs'),但我在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文件夹以外的位置创建节点渲染视图

1 个答案:

答案 0 :(得分:1)

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'}));
});