2016-09-30 6 views
1

Expressを含むNodeアプリケーションがあります。ここまでは、Swigをビューエンジンとして使用してきました。私はこのようなビューエンジンを設定しました:Express AppでNunjucksを使用する

app.engine('html', swig.renderFile); 
app.set('views', path.join(__dirname, '../views')); 
app.set('view engine', 'html');  

このアプローチは私のために働いています。しかし、Swigは非難されているので、私はNunjucksに移ろうとしています。これを行うために、私は以下を行った:

nunjucks.configure('views', { 
    autoescape: true, 
    cache: false, 
    express: app   
}); 

app.engine('html', nunjucks.render); 
app.set('views', path.join(__dirname, '../views')); 
app.set('view engine', 'html');  

これは動作しません。私はランタイムエラーが発生しますが、実際に何がスローされたのかはわかりません。最も基本的なビューをロードしようとする試みで、私は次のHTMLページをロードしようとしている:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
</head> 
<body> 
    <h1>Hello</h1> 
</body> 
</html> 

これは意図的に任意のテンプレートを使用していない、本当に基本的なHTML形式の図です。私はビューエンジンとして設定されたnunjucksでHTMLビューをロードできるようにしたいだけです。それでも、私はまだエラーが発生します。

私はrender functionがコールバックを持っていることがわかります。コールバックには私が見ることができるエラーオブジェクトがあるようです。しかし、私はどのように実際にそのコールバックをapp.engine('html', nunjucks.render);内で使用するのか分かりません。

任意の洞察力はずっと

答えて

4

をいただければ幸いですこれらの行を削除します。

app.engine('html', nunjucks.render); 
app.set('views', path.join(__dirname, '../views')); 
app.set('view engine', 'html');  

更新されたコード:

var nunjucks = require('nunjucks'); 
var app = express(); 

// looks for html in views folder relative to current working directory 
nunjucks.configure('views', { 
    autoescape: true, 
    cache: false, 
    express: app 
}); 

app.get('/', function(req, res) { 
    res.render('index.html'); 
}); 
+1

私がそうすると、「[エラー:テンプレートが見つかりません:index.html]」というエラーが表示されます。 nunjucksはindex.htmlがどこにあると予想していますか?私はそれが./views/index.htmlを探していると仮定します。しかし、明らかにそうではありません。 – user687554

+2

私は 'views'を 'path.join(__ dirname、 '../ views')'に置き換えました。さて、それは動作します。ありがとう – user687554

0

を私はNunjucks 3.0.1とエクスプレス4.15.3について、次のような構成を必要と。

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
nunjucks.configure('views', { 
    autoescape: true, 
    cache: false, 
    express: app 
}); 
app.set('view engine', 'html'); 
関連する問題