2016-04-18 4 views
0

を見つけていない私は、次エクスプレス4ビューエンジンの設定があります。私のルートで急行-ハンドルが私のレイアウトやパーシャル

/views 
    error.hbs 
    index.hbs 
    /partials 
     menu.hbs 
    /layouts 
     layout.hbs 

そして最後に:

var handlebars = require('express-handlebars').create({ 
    layoutsDir: path.join(__dirname, "views/layouts"), 
    partialsDir: path.join(__dirname, "views/partials"), 
    defaultLayout: 'layout', 
    extname: 'hbs' 
}); 

app.engine('handlebars', handlebars.engine); 
app.set('view engine', 'hbs'); 
app.set('views', path.join(__dirname, "views")); 

を私は、次のファイル構造を持っています:res.render('index');

私のサイトにアクセスすると、私のindex.hbsテンプレートだけが読み込まれます。私のlayout.hbsは使用していません。私は何かエラーや何かを得ることはありません。ハンドルバーの設定でlayoutがデフォルトレイアウトに設定されていても、レイアウトは使用されません。

次の私はこれに私のコードを変更しようとしました:

res.render('index', {layout: 'layout'});

今、私はエラーを取得する:

Error: ENOENT: no such file or directory, open '/.../views/layout.hbs'

それは私のlayoutsDirを見つけていないようなので、それはだ...何私はここで行方不明ですか?

次は私がこれまでにそれを変更:それは働いていたので

res.render('index', {layout: 'layouts/layout'});

わかりました。私のレイアウトがロードされました。しかし、私は私のレイアウトに部分的に追加:

{{> menu }}

を今私が手:/.../views/index.hbs: The partial menu could not be found

だから何がここで起こっていますか?どのようにハンドルバーが私のlayoutsDirまたはpartialsDirを認識しないのですか?それは、まったく何かでそれらを見ていないだけです。そして、どのようにdefaultLayoutが使われていないのですか?私はレイアウトを指定しなければならなかった。

答えて

3

デフォルト.handlebarsからファイル拡張子を変更している場合は、ビューのエンジンを設定するときに、ハンドルバーのすべての出現は、あなたが使用したい新しい拡張機能で置き換えるべきである特急-ハンドル用API documentationによります。

だからあなたの特急セットアップはに更新する必要があります:

app.engine('hbs', handlebars.engine); 
app.set('view engine', 'hbs'); 
app.set('views', path.join(__dirname, "views")); 

注:ドキュメントは、例えば拡張子の前にピリオドを使用しています.hbsしかし、これがなければうまくいくようです。

全コード:

var path = require('path'); 
var express = require('express'); 
var app = express(); 
var http = require('http').Server(app); 

var handlebars = require('express-handlebars').create({ 
    layoutsDir: path.join(__dirname, "views/layouts"), 
    partialsDir: path.join(__dirname, "views/partials"), 
    defaultLayout: 'layout', 
    extname: 'hbs' 
}); 

app.engine('hbs', handlebars.engine); 
app.set('view engine', 'hbs'); 
app.set('views', path.join(__dirname, "views")); 

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


http.listen(3000, function(){ 
    console.log("Server running"); 
}); 
+0

私は '.handlebars'と私のコードで取り出し' hbs'参照するすべての名前を変更しました。私の結果に変更はありません。 –

+0

前回の検証に使用した完全なコードで投稿を更新しました。あなたは違いを見つけることができますか?変更を正しく行った後でアプリを再起動しましたか? :) –

+0

何故か、何らかの理由で、すべての名前を '.hbs'に改名してコードを使用したら、今はうまくいきます。その違いが以前のものであったかどうかはっきりしない。はい、毎回ノードを再起動していました。ありがとう、 –

関連する問題