错误:ENOENT:Express-Handlebars中没有这样的文件或目录

时间:2019-06-28 17:00:39

标签: node.js 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()函数没有参数时,将显示以下错误

  

错误: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 属性,它可以工作并加载默认值,但是当我将网址更改为另一页时,它总是加载我设置为默认值的同一页面

这是项目文件夹及其所有内容

Directory

9 个答案:

答案 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'

答案。

enter image description here

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