2016-12-05 2 views
0

Я пытаюсь использовать express-handlebars и использовать partials, но я получаю следующее сообщение об ошибкеобертоны не оказывается экспресс-рули узел

The partial header could not be found.

app.js Мой код выглядит следующим образом.

var express = require('express'); 
var exphbs = require('express-handlebars'); 

var app = express(); 

app.engine('handlebars', exphbs({defaultLayout: 'main'})); 
app.set('view engine', 'hbs'); 

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

app.listen(3000); 

Все это работает, а экспресс-приложение работает на localhost: 3000.

Моя структура папок выглядит следующим образом:

|_app.js 
|_views_ 
     |_home.hbs 
     |_layouts_ 
        |_main.hbs 
     |_partials_ 
        |_header.hbs 

main.hbs

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>Example App</title> 
</head> 
<body> 

    {{{body}}} 

</body> 
</html> 

header.hbs

<nav> 
    <a href="/">Home</a> 
    <a href="/contact">Contact</a> 
</nav> 

home.hbs

{{> header}} 

<h1>Hey world!</h1> 

Все работает, как и ожидалось, пока я не попытаться представить header.hbs как частичный.

Может ли кто-нибудь увидеть какие-либо проблемы с моим кодом?

После дальнейших исследований я также попробовал это, без всякого успеха:

// Create `ExpressHandlebars` instance with a default layout. 
var hbs = exphbs.create({ 
    // Uses multiple partials dirs, templates in "shared/templates/" are shared 
    // with the client-side of the app (see below). 
    partialsDir: [ 
     'views/partials/' 
    ] 
}); 

// Register `hbs` as our view engine using its bound `engine()` function. 
app.engine('hbs', hbs.engine); 
app.set('view engine', 'hbs'); 

ответ

1

Это было необходимо определить следующие параметры для express-handlebars частичные работы.

var handlebars = require('express-handlebars'); 
app.engine('hbs', handlebars({ extname: '.hbs' })); 
app.set('view engine', 'hbs'); 

Вот полный код:

var handlebars = require('express-handlebars'); 
app.engine('hbs', handlebars({ extname: '.hbs' })); 
app.set('view engine', 'hbs'); 

app.get('/', function (request, response) { 
    response.render('home'); 
}); 
0

Я считаю, вам не хватает на следующую строку:

exphbs.registerPartials(__dirname + '/views/partials'); 
+0

TypeError: exphbs.registerPartials не является функцией –

+0

Это 'registerPartial' без 'с' http://handlebarsjs.com/partials.html – CreasolDev

+0

@CreasolDev, но я использую 'express-handlebars' –