【问题标题】:Cannot find module 'hbs', express-handlebars找不到模块“hbs”,快速车把
【发布时间】:2018-06-21 01:02:10
【问题描述】:

我正在尝试将 express-handlebars 视图引擎用于 express,但我不断收到以下错误:

Error: Cannot find module 'hbs'
    at Function.Module._resolveFilename (module.js:538:15)
    at Function.Module._load (module.js:468:25)
    at Module.require (module.js:587:17)
    at require (internal/module.js:11:18)
    at new View (C:\Users\WilPrim\Desktop\node-app\node_modules\express\lib\view.js:81:14)
    at Function.render (C:\Users\WilPrim\Desktop\node-app\node_modules\express\lib\application.js:570:12)
    at ServerResponse.render (C:\Users\WilPrim\Desktop\node-app\node_modules\express\lib\response.js:1008:7)
    at C:\Users\WilPrim\Desktop\node-app\routes\routes.js:5:6
    at Layer.handle [as handle_request] (C:\Users\WilPrim\Desktop\node-app\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\WilPrim\Desktop\node-app\node_modules\express\lib\router\route.js:137:13)

这是我的代码:

const express = require("express");
const bodyParser = require("body-parser");
const hbs = require("express-handlebars");
const router = require("./routes/routes");

//set up express app
var app = express();

app.use(bodyParser.json());

app.set('view engine', 'hbs');
app.set('views', './views');
app.set('view options', {layout: './layouts/layout'});

app.use(router);

【问题讨论】:

  • 愚蠢的问题,但你有没有运行npm install --save express-handlebars
  • 是的,我有。没用。
  • 对不起,您的意思是命令完成但出现错误,还是您可以验证软件包已安装在node_modules 并列为依赖项并且错误仍然存​​在?
  • 我完成了命令并安装了它,但仍然遇到同样的错误,它找不到模块'hbs'
  • 哦,刚刚注意到问题

标签: node.js express handlebars.js


【解决方案1】:

根据express-handlebarsdocumentation,您必须手动设置和注册视图引擎:

var express = require('express');
var exphbs  = require('express-handlebars');

var app = express();
var hbs = exphbs.create({ /* config */ });

// Register `hbs.engine` with the Express app.
app.engine('handlebars', hbs.engine);
app.set('view engine', 'handlebars');

// ...still have a reference to `hbs`, on which methods like `loadPartials()`
// can be called.

在文档中再往下看一点,看起来您仍然可以通过一些配置使用.hbs 扩展:

var express = require('express');
var exphbs  = require('express-handlebars');

var app = express();

app.engine('.hbs', exphbs({extname: '.hbs'}));
app.set('view engine', '.hbs');

【讨论】:

  • 我遇到了同样的问题,使用底部的第二段代码,我解决了这个问题。但是现在hbs正在views文件夹中寻找main.hbs文件
  • 如果您收到来自monsterpiece 的错误,请使用以下app.engine('.hbs', exphbs({extname: '.hbs', defaultLayout: false}))
  • 可能还需要设置视图路径。 app.set('views', path.join(__dirname, 'views'));
【解决方案2】:

使用命令——sudo npm link hbs

【讨论】:

  • 请编辑您的答案并在您的帖子中添加一些解释。该命令的作用是什么,OP为什么要使用它,它是如何解决问题的?
  • 应该是最快的方式
  • sudonpm 一起使用可能是一个安全问题。它为包中的任何脚本及其正在安装的依赖项提供对机器的根级别访问权限。
【解决方案3】:

您可能已将主文件夹命名为“express” 只需更改文件夹的名称,删除“package.json”并尝试 再次“npm install” “npm 安装快递” “npm 安装 hbs”

【讨论】:

    【解决方案4】:

    在终端上安装这个模块 --> npm i hbs

    【讨论】:

      【解决方案5】:

      尝试 npm install 和 npm audit fix 多次,然后在 ex 之后运行服务器

      【讨论】:

      • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 2017-04-24
      • 1970-01-01
      • 2020-01-16
      • 2014-12-19
      • 2018-06-07
      • 2015-02-16
      相关资源
      最近更新 更多