3

Node.js の Express.js で JSHTML をテンプレート エンジンとして動作させることができないようです。Express.js アプリケーションをインストールすると、基本的なアプリケーションが作成され、それを実行すると、次のエラー メッセージが表示されます。

500 TypeError: Property 'engine' of object #<View> is not a function
at View.render (/Users/blackbook/nodejs/ds/node_modules/express/lib/view.js:75:8)
at Function.app.render (/Users/blackbook/nodejs/ds/node_modules/express/lib/application.js:504:10)
at ServerResponse.res.render (/Users/blackbook/nodejs/ds/node_modules/express/lib/response.js:677:7)
at exports.index (/Users/blackbook/nodejs/ds/routes/index.js:7:7)
at callbacks (/Users/blackbook/nodejs/ds/node_modules/express/lib/router/index.js:165:11)
at param (/Users/blackbook/nodejs/ds/node_modules/express/lib/router/index.js:139:11)
at pass (/Users/blackbook/nodejs/ds/node_modules/express/lib/router/index.js:146:5)
at Router._dispatch (/Users/blackbook/nodejs/ds/node_modules/express/lib/router/index.js:173:5)
at Object.router (/Users/blackbook/nodejs/ds/node_modules/express/lib/router/index.js:33:10)
at next (/Users/blackbook/nodejs/ds/node_modules/express/node_modules/connect/lib/proto.js:190:15)

私のapp.jsは次のようになります(Express.jsが私のために作成したものです):

/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes')
  , http = require('http')
  , path = require('path');

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jshtml');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

app.get('/', routes.index);

http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

私はこのインストールを持っています:

  • Node.js v.0.8.5
  • Express.js@3.0.0rc2
  • jshtml@0.2.3
4

5 に答える 5

3

JSHTML は現在 Express.js 2 で動作します。エンジンを Express.js 3 で動作させる計画がありますが、現在は夏を楽しむのに忙しくしています。冬にこの問題の修正を期待してください!

于 2012-08-14T07:48:55.510 に答える
2

https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.xによると、2-x 互換性のために app.engine を使用できます。

例えば

var fs = require("fs");
var jshtml = require("jshtml");
app.engine("jshtml", function (path, options, fn) {
    fs.readFile(path, 'utf8', function (err, str) {
        if (err) return fn(err);
        str = jshtml.compile(str,options)(options).toString();
        fn(null, str);
    });
});
于 2013-01-13T14:45:29.413 に答える
0

以下を試してください。あなたのように、それは私のために働きます。

まず、npm 経由で jshtml-express をインストールしてから、次のようにします。

var app = express();
**app.engine('jshtml', require('jshtml-express'));**

// All environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jshtml');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

それがあなたにとってもうまくいくことを願っています。

于 2014-06-17T04:44:23.903 に答える
0

私はそれを私のプロジェクトで動作させており、おそらくすぐにプルリクエストを発行するでしょうが、今のところ https://github.com/elmerbulthuis/jshtml/issues/5の私のコメントを見てください

于 2013-01-13T20:21:57.723 に答える
0

consolidate.js は、多くのテンプレート エンジンと Express の間のブリッジとして使用されます。エンジンがサポートされていない場合は、ソース コードをチェックアウトしてください。ほとんどのエンジンは、実装に 15 行程度のコードが必要です。

于 2012-08-09T15:06:47.087 に答える