部分未被呈现为快速手柄节点

时间:2016-12-05 20:57:48

标签: javascript node.js express handlebars.js

我正在尝试使用express-handlebars并使用partials,但我收到以下错误消息

  

找不到部分标题。

我的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);

这一切正常,Express应用程序在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');

2 个答案:

答案 0 :(得分: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');
});

答案 1 :(得分:0)

我相信你错过了下一行:

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