0

現在のプロジェクトの書き直しで古いテンプレートを使用できるように、カスタムテンプレートエンジンを作成しました。Express.jsが常に送信することを除いて、すべてが機能しています

Error: Failed to lookup view (template name)

1つのファイルに複数のテンプレートがあり、テンプレートごとに1つのファイルは必要ありません。しかし、どうすればそれを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)
4

1 に答える 1

1

問題:

Expressは、テンプレートエンジンを使用して、ビューをレンダリングするビューオブジェクトを作成します。ビュー自体はファイルをファイルシステムで検索することによって作成されるため、テンプレートエンジンには、ファイルを独自に処理することをExpressに伝える方法がありません。

ソリューション:

テンプレートエンジンのアプローチを使用する代わりに、テンプレート関数の名前に応じてテンプレートエンジンへの呼び出しをインターセプトするカスタムミドルウェアを作成しました。基本的にはexpressresponse.render()で関数を上書きします。


更新: GitHubリポジトリ

于 2012-10-20T13:53:43.693 に答える