0

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

Error: Failed to lookup view (template name)

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

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

编辑:一些代码:

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)
4

1 回答 1

1

问题:

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

解决方案:

我没有使用模板引擎方法,而是编写了一个自定义中间件,它根据模板函数的名称拦截对我的模板引擎的调用。基本上我覆盖了expressresponse.render()中的函数。


更新: GitHub 回购

于 2012-10-20T13:53:43.693 回答