3

私の問題を再評価するこれらの2つの投稿を読みました:

    http://stackoverflow.com/questions/4529586/render-basic-html-view-in-node-js-express
http://stackoverflow.com/questions/12046421/how-to-configure-express-js-jade-to-process-html-files

私のコードは次のとおりです。

app.engine('.html', require('jade').__express);
app.set('views', __dirname + '/app/views');
app.set('view engine', 'html');

何らかの理由で、まだ翡翠ファイルであるかのようにインデックスを読み込もうとしているため、エラーが発生していることは明らかです。.html ファイルをサーバーに正しく設定したと思います。ここで何が問題なのですか?私は迷子になっています...

私は行を並べ替えようとしましたが、それでも同じエラーです。

しかし、何らかの理由でこのエラーが発生します:

Error: ....\views\index.html:4
    2| <html lang="en" ng-app="squashApp">
    3| <head>
  > 4|   <meta charset="utf-8">
    5|   <title>Squash Organizer</title>
    6|   <link rel="stylesheet" href="css/app.css"/>
    7|   <link rel="stylesheet" href="css/bootstrap.css"/>

unexpected token "indent"
    at Object.Parser.parseExpr (C:\Users\workspace\squash\node_modules\jade\lib\parser.js:241:15)
    at Object.Parser.parse (C:\Users\workspace\squash\node_modules\jade\lib\parser.js:133:25)
    at parse (C:\Users\workspace\squash\node_modules\jade\lib\jade.js:93:62)
    at Object.exports.compile (C:\Users\workspace\squash\node_modules\jade\lib\jade.js:156:9)
    at Object.exports.render (C:\Users\workspace\squash\node_modules\jade\lib\jade.js:210:15)
    at Object.exports.renderFile (C:\Users\workspace\squash\node_modules\jade\lib\jade.js:247:18)
    at View.exports.renderFile [as engine] (C:\Users\workspace\squash\node_modules\jade\lib\jade.js:232:21)
    at View.render (C:\Users\workspace\squash\node_modules\express\lib\view.js:76:8)
    at Function.app.render (C:\Users\workspace\squash\node_modules\express\lib\application.js:505:10)
    at ServerResponse.res.render (C:\Users\workspace\squash\node_modules\express\lib\response.js:756:7)

ありがとう。

4

2 に答える 2

4

この行で:

app.engine('.html', require('jade').__express);

.htmlジェイドを使用して終わるテンプレートをレンダリングするように Express に指示しました。

これで:

app.set('view engine', 'html');

拡張子のないテンプレート名を で終わるものとして解釈する必要があることをexpressに伝えましたhtml

したがって、私の推測では、あなたは render を試みて'index'おり、express はそれを と解釈し、index.html指示されたとおりに jade に渡します。

jade をそれ自身のエクステンションにマップする方が良いです (.jadeは明白な候補です)。index.htmlフルネームを使用してレンダリングします。

  1. プロジェクトにconsolidate.jsを追加します。

    var engines = require('consolidate');
    
  2. で終わるものをレンダリングするように翡翠に伝えます.jade

    app.engine('jade', require('jade').__express);
    
  3. で終わるものの単純な html レンダラーを登録し.htmlます。

    app.engine('html', function(str, options) {
       return function(locals) {
           return str;
       };
    });
    
  4. 拡張子のないテンプレートを jade としてレンダリングするように Express に指示します。

    app.set('view engine', 'jade');
    
  5. これを使用してインデックスをレンダリングします。

    res.render('index.html');
    

    この:

    res.render('view-name-without-extension'); 
    

    翡翠のテンプレートをレンダリングします。

于 2013-08-13T13:43:13.387 に答える
1

デフォルトでは、express は Jade テンプレート エンジンを使用します。app.js は次のようになります。

/**
 * Module dependencies.
 */

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

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade'); // <<<---- CHANGES FROM EJS TO JADE !!!
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')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});
于 2013-08-13T13:45:53.590 に答える