【问题标题】:Having a Node.JS Express template engine with multiple templates in one file在一个文件中拥有一个包含多个模板的 Node.JS Express 模板引擎
【发布时间】:2012-10-16 16:36:03
【问题描述】:

我编写了一个自定义模板引擎,让我可以在重写当前项目时使用我的旧模板。一切正常,除了 Express.js 总是发送一个

Error: Failed to lookup view (template name)

我在一个文件中有多个模板,我不需要为每个模板创建一个文件。但是我怎么能告诉 Express 呢?

我无法理解这一点。 任何帮助表示赞赏

编辑:一些代码:

My Express Setup: (app.js)

var express = require('express');
var app = express();
var gclosure = require('./templateEngine');
var fs = require('fs');

/**
 * Setup Express
 */
app.configure(function(){

    app.engine('test', gclosure.__express);

    app.set('views', __dirname + '/public/templates');
    app.set('view engine', 'test');

    app.use(express.favicon());
    app.use(express.bodyParser());
    app.use(express.cookieParser());
    app.use(express.methodOverride());

    app.use(require('less-middleware')({
        src: __dirname + '/public'
    }));

    app.use(express.static(__dirname + '/public'));
});

我的自定义模板引擎 (templateEngine.js)

exports.renderFile =  function(path, options, fn){

  if ('function' == typeof options) {
    fn = options, options = {};
  }

  try {

    fm(null, "This is a test output");

  } catch (err) {
    fn(err);
  }
};

我在快递中的测试路线:

  app.get('/', function(req, res, next) {

    res.render('simple',{
              title: 'Sources',
              data: 'lala',
              options: 'miep'
          }); 

  });

线索是:当我在模板文件夹中创建一个名为 simple.test 的文件时,一切正常,我可以看到测试输出字符串。当我将名称更改为不存在的名称时,输出是

Error: Failed to lookup view (template name)

【问题讨论】:

  • 您确实需要向我们展示更多代码,所以请详细说明!
  • 我没有水晶球,所以看不到你的代码。
  • 对不起,你是对的。我添加了我的示例代码。 TY

标签: node.js templates express template-engine


【解决方案1】:

问题:

Express 使用模板engine 创建一个渲染视图的视图对象。由于视图本身是通过在文件系统中查找文件来创建的,因此模板引擎无法告诉 express 它自己处理文件。

解决方案:

我没有使用模板引擎方法,而是编写了一个custom middle-ware,它根据模板函数的名称拦截对我的模板引擎的调用。基本上我会覆盖express中的response.render()函数。


更新: GitHub Repo

【讨论】:

  • 既然你问得这么好并且在考虑好好问之前投了反对票:No can doeville
  • 我目前正在编写一个 github 项目来展示这个中间件。由于此中间件是针对 Google Closure Templates 量身定制的,因此可能需要使其与您所需的模板引擎一起使用。但它应该为您指明正确的方向。给我几天时间,因为我正在从一个城市搬到另一个城市。
  • 开源社区的人们也在努力帮助他人,所以当你有时间的时候请去做。 -谢谢
  • 开源的人也帮助别人......就像你在帮助我一样!?我不明白你的态度——或者你可能马上就粗鲁了。 Anywho:这里是存储库github.com/johnnycube/gclosure-node
猜你喜欢
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-30
  • 2018-02-02
  • 2014-01-18
  • 2012-08-15
相关资源
最近更新 更多