javascript - 如何解决 找不到部分车头 Handlebars

标签 javascript node.js express handlebars.js

我运行 ExpressJS 并安装 Handlebars 作为模板引擎。我正在使用 AdminLTE 并将其拆分为 /views/layouts 中的 6 个 hbs 文件。我将 AdminLTE 模板放在 public 文件夹中。

views/layouts
   -- base.hbs // as defaultLayout
   -- footer.hbs
   -- head.hbs
   -- js.hbs
   -- nav.hbs
   -- sidebar.hbs

每次尝试访问 localhost:3000 时,我都会在 Node 控制台上收到以下错误

Error: The partial head could not be found

这是我的 app.js 设置:

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var flash = require('express-flash');
var session = require('express-session');
var mongoose = require('mongoose');
var validator = require('express-validator');
var override = require('method-override');
var hbs = require('express-handlebars');

var routes = require('./routes/index');
var users = require('./routes/users');

var app = express();

// view engine setup
app.engine('hbs', hbs({extname: 'hbs', defaultLayout: 'base', layoutDir: __dirname + '/views/layouts'}));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: false
}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(session({secret: "1234"}));
app.use(flash());
app.use(validator());
app.use(override(function(req, res) {
  if (req.body && typeof req.body == 'object' && '_method' in req.body) {
    var method = req.body._method;
    delete req.body._method;
    return method;
  }
}));
[...]

这是我的base.hbs 文件:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    {{> head}}
  </head>
  <body class="hold-transition skin-blue sidebar-mini">
    <div class="wrapper">
      {{> nav}}
      {{> sidebar}}

      <div class="content-wrapper">
        {{{ body }}}
      </div>

      {{> footer}}
      <div class="control-sidebar-bg"></div>

      {{> js}}

    </div>
  </body>
</html>

最佳答案

您需要在配置 express-handlebars 时注册 partials 目录的路径,并将您的 partials 移动到该文件夹​​。

app.engine('hbs', hbs({
    extname: 'hbs', 
    defaultLayout: 'base', 
    layoutsDir: path.join(__dirname, 'views/layouts'),
    partialsDir  : [
        //  path to your partials
        path.join(__dirname, 'views/partials'),
    ]
}));

关于javascript - 如何解决 找不到部分车头 Handlebars ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40581287/

相关文章:

javascript - 浏览器中有搜索/查找事件吗?

javascript - Phonegap 应用程序 - 防止 iphone 将数字变成拨号器链接

json - 无法读取在 Unity 中使用 JSONUtility 创建的 java 脚本( Node JS - Express)中的 JSON 数据

node.js - Express.JS 中使用动态 URL 的 HTTP 身份验证

node.js - res.render 之后加载 ejs 文件时未定义holedata

javascript - 跟踪 javascript 内存使用情况

javascript - 无法在 JavaScript 中设置 null 的属性 'value'

javascript - 尝试 NPM 发布时 "Class constructor cannot be invoked without ' 新 '"

node.js - 风 sails js : dynamic tableName in model

node.js - 如何在 Express 中使用 Jade 的 CoffeeScript 过滤器?