gpt4 book ai didi

node.js - express-handlebars 找不到我的布局或部分

转载 作者:搜寻专家 更新时间:2023-11-01 00:17:15 26 4
gpt4 key购买 nike

我有以下 Express 4 View 引擎设置:

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"));

我有以下文件结构:

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

最后在我的 route :res.render('index');

访问我的网站时,它只加载我的 index.hbs 模板。它不使用我的 layout.hbs。我没有得到任何错误或任何东西。它只是不使用布局,即使 layout 在 handlebars 配置中设置为我的默认布局。

接下来我尝试将我的代码更改为:

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

现在我得到错误:

错误:ENOENT:没有这样的文件或目录,打开“/.../views/layout.hbs”

所以它好像没有找到我的 layoutsDir...我在这里错过了什么?

接下来我改成了这样:

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

好的,这样就成功了。我的布局现已加载。但后来我在我的布局中添加了一部分:

{{> 菜单}}

现在我得到:/.../views/index.hbs: The partial menu could not be found

那么这里发生了什么?为什么 Handlebars 无法识别我的 layoutsDirpartialsDir?只是根本没有看到他们或其他什么。为什么 defaultLayout 没有被使用?我必须指定布局。

最佳答案

根据API documentation对于 express-handlebars,如果您要更改默认 .handlebars 的文件扩展名,那么当您设置 View 引擎时,所有出现的 handlebars 都应替换为您的新扩展名想用。

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

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");
});

关于node.js - express-handlebars 找不到我的布局或部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36686810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com