我正在使用express-handlebars
在NodeJS中加载动态内容
在app.js
内
const express = require("express");
const bodyParser = require("body-parser");
const path = require("path");
const pp = require("./util/path.js");
const adminRoutes = require("./routes/admin");
const shopRoutes = require("./routes/shop");
const expressHbs = require("express-handlebars");
const app = express();
app.engine("hbs",expressHbs());
app.set("view engine", "hbs");
app.set("views", "views");
app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, "public")));
app.use("/admin", adminRoutes.routes);
app.use(shopRoutes);
app.use((req, res, next) => {
res.status(404).render("404", { pageTitle: "Page Not Found" });
});
app.listen(3001, "localhost", () => console.log("Listening on 3001 PORT"));
expressHbs()
函数没有参数时,将显示以下错误
错误:ENOENT:没有此类文件或目录,请打开“ C:\ dev \ nodejs \ maximi_course \ views \ layouts \ main.handlebars”
当我将选项对象传递给它时:
app.engine(
"hbs",
expressHbs({
extname: "hbs",
layoutsDir: path.join(__dirname, "views")
})
);
它显示:
错误:ENOENT:没有此类文件或目录,请打开'C:\ dev \ nodejs \ maximi_course \ views \ main.hbs'
我一直在寻找解决方案,但没有结果,实际上,我正在按照教程进行操作,与老师的操作相同,但是出现错误。
我最近尝试过的事情是添加 defaultLayout 属性,它可以工作并加载默认值,但是当我将网址更改为另一页时,它总是加载我设置为默认值的同一页面
这是项目文件夹及其所有内容
答案 0 :(得分:5)
express-handlebars.js@4.0.1定义以下配置选项
function ExpressHandlebars(config) {
// Config properties with defaults.
utils.assign(this, {
handlebars : Handlebars,
extname : '.handlebars',
layoutsDir : undefined, // Default layouts directory is relative to `express settings.view` + `layouts/`
partialsDir : undefined, // Default partials directory is relative to `express settings.view` + `partials/`
defaultLayout : 'main',
helpers : undefined,
compilerOptions: undefined,
}, config);
如果不使用默认布局,则可以如下设置defaultLayout: false
app.engine(
"hbs",
expressHbs({
extname: "hbs",
defaultLayout: false
})
);
答案 1 :(得分:3)
需要将defaultLayout设置为false,否则“ express-handlebars”将搜索main.handlebars。
app.engine("hbs", expressHbs({ defaultLayout: false }));
app.set("view engine", "hbs");
app.set("views", "views");
答案 2 :(得分:1)
Node.js / Expressjs
问:错误:ENOENT:没有这样的文件或目录,请打开 'S:\ globle_express \ views \ layouts \ main.handlebars'答案。
computed: {
status(){
if(dateEvent.status === 'O'){
return `<button" type="button" class=" taskButton btn-default"><a style="color:white;">Accept</a></button>`
}else{
if(dateEvent.status === 'P'){
return 'In Progress'
}else{
return 'Completed'
}
}
}
答案 3 :(得分:0)
实际上,express-handlebars
有点令人讨厌,但是可以通过以下方法解决:
Routes
之一的独立文件,并将其名称分配给defaultLayout
views/layouts/
extname
app.engine(
"hbs",
expressHbs({
extname: "hbs",
defaultLayout: "main-layout",
layoutsDir: "views/layouts/"
})
);
答案 4 :(得分:0)
无需创建其中包含文件的layouts文件夹。创建'views'文件夹并添加文件。例如'form.handlebars'然后根据您的代码执行以下操作
app.get('/' (req,res)=> {
res.render("contact", {
layout: false,
name: req.body.name,
quote: req.body.quote
});
})
答案 5 :(得分:0)
我遇到了相同的问题,并使用以下方法解决了该问题:
app.engine( “ hbs”, expressHbs({ 扩展名:“ hbs”, defaultLayout:false, layoutsDir:“视图/布局/” }) );
答案 6 :(得分:0)
将此包含在您的 kafka-server-start.bat C:\kafka\config\server-0.properties
app.js
答案 7 :(得分:0)
将defaultLayout设置为false将解决此问题。 我的代码对我来说很好用。
app.engine('hbs',hbs(
{
extname:'hbs',
defaultLayout:false,
layoutDir:__dirname+'/views/layout/',
partialsDir:__dirname+'/views/partials/'
}
))
更好地将文件夹名称保留为布局,而将文件名保留在其中是layout.hbs,不带“ s”。
重命名文件夹后,我之前的代码可以与我完美地工作。
app.engine('hbs',hbs(
{
extname:'hbs',
defaultLayout:'layout',
layoutDir:__dirname+'/views/layouts/',
partialsDir:__dirname+'/views/partials/'
}
))
答案 8 :(得分:0)
<select class="selectpicker">
<option>Mustard</option>
<option>Ketchup</option>
<option>Barbecue</option>
</select>
对于快递4