Я использую 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 , и оно работает и загружает значение по умолчанию, но когда я изменяю URL на другую страницу, он всегда загружает ту же страницу, которую я установил по умолчанию
Вот папка проекта и все ее содержимое
