首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >express-handlebars找不到我的布局或部分

express-handlebars找不到我的布局或部分
EN

Stack Overflow用户
提问于 2016-04-18 14:25:51
回答 2查看 11.8K关注 0票数 4

我有以下Express 4视图引擎设置:

代码语言:javascript
复制
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"));

我有以下文件结构:

代码语言:javascript
复制
/views
    error.hbs
    index.hbs
    /partials
        menu.hbs
    /layouts
        layout.hbs

最后,在我的路线中:res.render('index');

访问我的站点时,它只加载我的index.hbs模板。它不使用我的layout.hbs。我没有得到任何错误或任何东西。它只是不使用布局,即使在handlebars配置中将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

那么这是怎么回事呢?为什么Handlebar不能识别我的layoutsDirpartialsDir?只是根本看不到它们或者别的什么。为什么defaultLayout没有被使用呢?我必须指定布局。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-18 20:10:53

根据express-handlebars的API documentation,如果您要更改默认.handlebars的文件扩展名,则在设置视图引擎时,所有出现的handlebars都应替换为您希望使用的新扩展名。

因此,您的快速设置需要更新为:

代码语言:javascript
复制
app.engine('hbs', handlebars.engine);
app.set('view engine', 'hbs');
app.set('views', path.join(__dirname, "views"));

注意:文档在扩展名前使用了句点,例如.hbs,但似乎没有句点。

完整代码:

代码语言:javascript
复制
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");
});
票数 10
EN

Stack Overflow用户

发布于 2020-02-05 03:23:19

在你使用部分的新的把手中,你不必在server.js中包含它的目录

在视图引擎安装程序中的第一行中包含的部分参数负责上述"express-handlebars"

  • The

请注意这些内容。

代码语言:javascript
复制
    const hbs = require('hbs');
    const expressHbs = require('express-handlebars');

//view engine setup
     app.engine('.hbs', expressHbs({ defaultLayout: 'layout', extname: '.hbs' }));
     app.set('view engine', 'hbs');
     app.set('views', path.join(__dirname, '../views'));
     app.use(express.static(path.join(__dirname, '../public')));

尝试在依赖项上使用通配符,以确保与最新版本匹配

代码语言:javascript
复制
"dependencies": {  
    "express": "*",
    "express-handlebars": "^3.0.0",
    "hbs": "*"
  },
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36686810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档