标签: express-handlebars

类型错误:exphbs 不是函数

我正在尝试使用 Express-handlebars 模块,但出现错误。我的代码:

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

app.engine('.hbs', exphbs({ extname: '.hbs', defaultLayout: "main"}));
app.set('view engine', '.hbs');
Run Code Online (Sandbox Code Playgroud)

我的错误:

"app.engine('.hbs', exphbs({ extname: '.hbs', defaultLayout: "main"}));
                   ^

TypeError: exphbs is not a function"
Run Code Online (Sandbox Code Playgroud)

我似乎无法弄清楚为什么它不能正常工作。有任何想法吗?

javascript node.js express express-handlebars

30
推荐指数
4
解决办法
4万
查看次数

MIME 类型 ('text/html') 不是受支持的样式表

我正在将一个 css 文件链接到我的 express-handlebars 文件,但出现此错误:

拒绝应用来自“ http://localhost:4000/cs366/style/draft.css ”的样式,因为其 MIME 类型(“text/html”)不是受支持的样式表 MIME 类型,并且启用了严格的 MIME 检查。

我设置了静态目录,我的 css 被应用到 home.handlebars,但不是 FantasyDraft.handlebars

我的文件目录

project
|-- public
|   `-- style
|       |-- home.css
|       `-- draft.css
|-- Fantasy
|   `-- fantasyRouting.js
|-- views
|   |-- fantasyDraft.handlebars
|   `-- home.handlebars
|-- app.js
`-- connect.js
Run Code Online (Sandbox Code Playgroud)

应用程序.js

const express = require('express');
var exphbs  = require('express-handlebars');
const db = require('./connect'); //connnect to db
const path = require('path');
const app = express();


//middleware
app.use(express.urlencoded({extended: false}));

//static folder …
Run Code Online (Sandbox Code Playgroud)

css node.js express handlebars.js express-handlebars

9
推荐指数
1
解决办法
2万
查看次数

如何使用带有 nodemailer 的把手发送电子邮件?

我正在使用 nodemailer 使用以下nodemailer-express-handlebars插件发送电子邮件。我用这个{dead blog post}作为参考

代码正在编译welcome模板但没有使用layout

我的代码如下:

var nodemailer = require('nodemailer');
var mg = require('nodemailer-mailgun-transport');
var hbs = require('nodemailer-express-handlebars');

var config = {auth: {api_key: "key-xxx",domain: "mydomain.com}}
var nodemailerTransport = nodemailer.createTransport(mg(config));

var options = {
    viewEngine: {
        extname: '.handlebars',
        layoutsDir: 'views/email/',
        defaultLayout : 'layout',
    },
    viewPath: 'views/email/'
}

nodemailerTransport.use('compile', hbs(options));

nodemailerTransport.sendMail({
        from: 'from@mydomain.com',
        to: 'to@gmail.com',
        subject: 'Welcome to the XXX',
        template: 'welcome'
    }, function (err, results) {
        if (err) console.log('Error: ' + err);
        else console.log('Response: ' …
Run Code Online (Sandbox Code Playgroud)

handlebars.js nodemailer express-handlebars

6
推荐指数
1
解决办法
9788
查看次数

Express Handlebars 不会渲染数据

我正在使用 Express-Handlebars 模板引擎使用 NodeJS 和 Express。

Handlebars 在尝试渲染模板时抛出以下错误:

Handlebars:访问已被拒绝解析属性“用户名”,因为它不是其父级的“自己的属性”。您可以添加运行时选项以禁用检查或此警告:有关 详细信息,请参阅 https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access

根据上面的链接:

从 4.6.0 版本开始,Handlebars 默认禁止访问上下文对象的原型属性和方法。原因是这种可能性引起的各种安全问题。

我的 app.js 包含以下内容:

const exphbs = require('express-handlebars');
const express = require('express');
// Init Express
const app = express();
// VIEW ENGINE
app.engine('handlebars', exphbs({
  defaultLayout: 'main'
}));
app.set('view engine', 'handlebars');
Run Code Online (Sandbox Code Playgroud)

我的路由文件通过 Mongoose 从 MongoDB 获取:

const exphbs = require('express-handlebars');
const express = require('express');
// Init Express
const app = express();
// VIEW ENGINE
app.engine('handlebars', exphbs({
  defaultLayout: 'main'
}));
app.set('view engine', 'handlebars');
Run Code Online (Sandbox Code Playgroud)

模型是一个对象数组

这个问题只是在我开始添加把手助手之后才开始发生。我已经删除了帮助程序并恢复到我的原始配置设置(上面)无济于事。我试过删除 node_modules 文件夹并重新安装 …

mongoose node.js express server-side-rendering express-handlebars

6
推荐指数
3
解决办法
6785
查看次数

快速把手渲染为字符串而不是响应

我目前成功地使用了 Express Handbars - 但是我想用它来更新和渲染页面的一部分 - 随时间变化的项目列表,所以我想在计时器上更新该列表。基本上在浏览器上我有以下代码:

$.get( "myUrl").then( result => $("#targetdiv").html( result.html ));
Run Code Online (Sandbox Code Playgroud)

所以在服务器上的每个页面我都做了这样的事情:

app.get("/myUrl", async (req, res) => {res.render( "someTemplateFile");} )
Run Code Online (Sandbox Code Playgroud)

然而,显然这两者不能一起工作 - 我需要这样做:

app.get("/myUrl", async (req, response) => 
{
   var renderedHtml =   .....someCodeHere...... ("someTemplateFile");
   response.send( {html:renderedHtml} );
}
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以做到这一点?

node.js express handlebars.js express-handlebars

5
推荐指数
1
解决办法
4212
查看次数

express-handlebars 找不到目录或文件

好吧,所以我试图让车把工作,所以我一直在关注这个 youtube 指南:https : //www.youtube.com/watch?v= SfQFoMOd_ng

我的问题是第 15 行的代码出错:

错误:ENOENT:没有那个文件或目录,打开'C:\Users\9826skma\Desktop\Lol stats\playground\test handlebars\views\layouts\main.handlebars'

server.js 文件

我用过

npm i express --save, npm i express-handlebars --save 在 powershell 中

node.js express express-handlebars

5
推荐指数
2
解决办法
4568
查看次数

Nodemailer-express-车把 | 错误:ENOENT:模板没有这样的文件或目录

我遇到一个问题,nodemailer-express-handlebars 输出错误:

\n
[Error: ENOENT: no such file or directory, open ''] {\n  errno: -2,\n  code: 'ENOENT',\n  syscall: 'open',\n  path: '/Users/person/Code/app/api/controllers/templates/undefined.hbs'\n
Run Code Online (Sandbox Code Playgroud)\n

我的设置如下:

\n
 const handlebarOptions = {\n    viewEngine: {\n      extName: ".hbs",\n      partialsDir: path.resolve(__dirname, "templates"),\n      defaultLayout: false\n    },\n    viewPath: path.resolve(__dirname, "templates"),\n    extName: ".hbs"\n  };\n\n  transporter.use('compile', hbs(handlebarOptions));\n
Run Code Online (Sandbox Code Playgroud)\n

并发送电子邮件:

\n
 let mailOptions = await transporter.sendMail({\n    from: '"Test - No Reply" <test@test.com>'\n    to: 'someEmail@gmail.com, \n    subject: "Hello \xe2\x9c\x94",\n    template: 'welcome',\n  });\n
Run Code Online (Sandbox Code Playgroud)\n

奇怪的是,我仍然收到电子邮件,尽管它说找不到该文件。如何解决此错误并使 nodemailer-express-handlebars 不会将文件视为“undefined.hbs”?

\n

更新:

\n

我在节点邮件程序中将“welcome”更改为“welcome.hbs”,现在错误提示找不到“welcome.hbs.hbs”。这是有道理的,您可能认为解决方案是删除“.hbs”并使其“欢迎”,但随后我们又回到了“undefined.hbs”的原始错误。

\n

另外,如果我将模板更改为“welcome2”,它会说找不到“welcome2.hbs”。它很奇怪......就好像只有当模板文件与它应该是的文件名匹配时它才变得未定义。

\n

node.js express handlebars.js nodemailer express-handlebars

5
推荐指数
2
解决办法
6317
查看次数

基本的“if”语句在车把 JS 中不起作用

我正在使用express-handlebars并拥有以下最小模板:

<!DOCTYPE html>
<html>

    <body>

        {{#if page === 'help'}}YAAAY{{/if}}

    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

这无法解析:

Error: C:\Users\mike\myapp\views\error.hbs: Parse error on line 6:
...ody>     {{#if page === 'help'}}YAAAY{{/i
---------------------^
Run Code Online (Sandbox Code Playgroud)

我知道车把不期待===,但这不是重点if吗?

如何if在车把中使用语句?

javascript conditional node.js handlebars.js express-handlebars

3
推荐指数
1
解决办法
2008
查看次数

错误:ENOENT: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"));

Run Code Online (Sandbox Code Playgroud)

expressHbs()函数没有参数时,它显示以下错误

错误:ENOENT:没有那个文件或目录,打开'C:\dev\nodejs\maximi_course\views\layouts\main.handlebars'

当我将一个选项对象传递给它时: …

node.js express-handlebars

3
推荐指数
4
解决办法
8532
查看次数

解析属性“名称”的访问被拒绝,因为它不是其父级的“自己的属性”

我试图获取用户在表单字段中输入的详细信息,以便我可以编辑和更新所选记录。但是,当我单击编辑按钮时,我在表单中看到空白表单字段。

router.get('/list', (req, res) => {
    Employee.find((err, docs) => {
        if (!err) {
            res.render("employee/list", {
                list: docs,
            });
        }
        else {
            console.log('Error in retrieving employee list :' + err);
        }
    }); 
})
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚出了什么问题。我已将用户输入的值传递为req.body。所有操作都正常工作,但无法更新记录,因为我无法从表单中获取用户 ID。

<tbody>
    {{#each list}}
    <tr>
        <td>{{this.name}}</td>
        <td>{{this.email}}</td>
        <td>{{this.mobile}}</td>
        <td>{{this.city}}</td>
        <td>
            <a href="/employee/{{this._id}}"><i class="fa fa-pencil fa-lg" aria-hidden="true"></i></a>
            <a href="/employee/delete/{{this._id}}" onclick="return confirm('Are you sure to delete this record ?');"><i class="fa fa-trash fa-lg" aria-hidden="true"></i></a>
        </td>
    </tr>
    {{/each}}
</tbody>
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb node.js express express-handlebars

3
推荐指数
1
解决办法
4703
查看次数