Error: ENOENT: no such file or directory in express-handlebars
Error: ENOENT: no such file or directory in express-handlebars
我正在使用 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()
函数没有参数时会显示以下错误
Error: ENOENT: no such file or directory, open 'C:\dev\nodejs\maximi_course\views\layouts\main.handlebars'
当我向它传递一个选项 object 时:
app.engine(
"hbs",
expressHbs({
extname: "hbs",
layoutsDir: path.join(__dirname, "views")
})
);
显示:
Error: ENOENT: no such file or directory, open 'C:\dev\nodejs\maximi_course\views\main.hbs'
我已经搜索了一个解决方案,但我没有得到任何结果,实际上我正在按照教程进行操作并且我已经按照老师的方法做了但是我得到了一个错误。
我尝试的最后一件事是添加 defaultLayout 属性 它可以工作并加载默认值但是当我将 url 更改为另一个页面时它始终加载我设置为默认的相同页面
这是项目文件夹及其所有内容
实际上 express-handlebars
有点烦人的问题,但解决方法如下:
- 我不得不创建一个独立文件,它不是
Routes
之一,并将其名称分配给 defaultLayout
- 我必须将路径设置为
views/layouts/
- 我必须将
extname
定义为我定义的扩展
app.engine(
"hbs",
expressHbs({
extname: "hbs",
defaultLayout: "main-layout",
layoutsDir: "views/layouts/"
})
);
节点.js/Expressjs
问。错误:ENOENT:没有那个文件或目录,打开
'S:\globle_express\views\layouts\main.handlebars'
回答。
enter image description here
Rename your layout folder and do layouts
The folder structure of Expressjs should be like this
无需使用 it.create 'views' 文件夹中的文件创建布局文件夹并添加该文件。例如'form.handlebars'然后根据你的代码做下面的事情
app.get('/' (req,res)=> {
res.render("contact", {
layout: false,
name: req.body.name,
quote: req.body.quote
});
})
我遇到了同样的问题,并通过以下方法解决了这个问题:
app.engine(
"hbs",
expressHbs({
extname: "hbs",
defaultLayout: false,
layoutsDir: "views/layouts/"
})
);
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
})
);
将此添加到您的 app.js
app.locals.layout = false;
Need to set defaultLayout as false, else "express-handlebars" will search for main.handlebars.
app.engine("hbs", expressHbs({ defaultLayout: false }));
app.set("view engine", "hbs");
app.set("views", "views");
将 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/'
}
))
app.engine(
'hbs',
hbs.express4({
defaultLayout: false,
partialsDir: __dirname + '/views/partials'
})
);
快递4
您可以简单地添加:
app.engine('handlebars', exphbs.engine());
app.set('view engine', 'handlebars')
它对我有效。
谢谢:)
我正在使用 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()
函数没有参数时会显示以下错误
Error: ENOENT: no such file or directory, open 'C:\dev\nodejs\maximi_course\views\layouts\main.handlebars'
当我向它传递一个选项 object 时:
app.engine(
"hbs",
expressHbs({
extname: "hbs",
layoutsDir: path.join(__dirname, "views")
})
);
显示:
Error: ENOENT: no such file or directory, open 'C:\dev\nodejs\maximi_course\views\main.hbs'
我已经搜索了一个解决方案,但我没有得到任何结果,实际上我正在按照教程进行操作并且我已经按照老师的方法做了但是我得到了一个错误。
我尝试的最后一件事是添加 defaultLayout 属性 它可以工作并加载默认值但是当我将 url 更改为另一个页面时它始终加载我设置为默认的相同页面
这是项目文件夹及其所有内容
实际上 express-handlebars
有点烦人的问题,但解决方法如下:
- 我不得不创建一个独立文件,它不是
Routes
之一,并将其名称分配给defaultLayout
- 我必须将路径设置为
views/layouts/
- 我必须将
extname
定义为我定义的扩展
app.engine(
"hbs",
expressHbs({
extname: "hbs",
defaultLayout: "main-layout",
layoutsDir: "views/layouts/"
})
);
节点.js/Expressjs
问。错误:ENOENT:没有那个文件或目录,打开 'S:\globle_express\views\layouts\main.handlebars'
回答。
enter image description here
Rename your layout folder and do layouts
The folder structure of Expressjs should be like this
无需使用 it.create 'views' 文件夹中的文件创建布局文件夹并添加该文件。例如'form.handlebars'然后根据你的代码做下面的事情
app.get('/' (req,res)=> {
res.render("contact", {
layout: false,
name: req.body.name,
quote: req.body.quote
});
})
我遇到了同样的问题,并通过以下方法解决了这个问题:
app.engine(
"hbs",
expressHbs({
extname: "hbs",
defaultLayout: false,
layoutsDir: "views/layouts/"
})
);
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
})
);
将此添加到您的 app.js
app.locals.layout = false;
Need to set defaultLayout as false, else "express-handlebars" will search for main.handlebars.
app.engine("hbs", expressHbs({ defaultLayout: false }));
app.set("view engine", "hbs");
app.set("views", "views");
将 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/'
}
))
app.engine(
'hbs',
hbs.express4({
defaultLayout: false,
partialsDir: __dirname + '/views/partials'
})
);
快递4
您可以简单地添加:
app.engine('handlebars', exphbs.engine());
app.set('view engine', 'handlebars')
它对我有效。 谢谢:)