我正在尝试使用 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)
我似乎无法弄清楚为什么它不能正常工作。有任何想法吗?
我正在将一个 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) 我正在使用 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) 我正在使用 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
我目前成功地使用了 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)
有没有一种简单的方法可以做到这一点?
好吧,所以我试图让车把工作,所以我一直在关注这个 youtube 指南:https : //www.youtube.com/watch?v= SfQFoMOd_ng
我的问题是第 15 行的代码出错:
错误:ENOENT:没有那个文件或目录,打开'C:\Users\9826skma\Desktop\Lol stats\playground\test handlebars\views\layouts\main.handlebars'
我用过
npm i express --save, npm i express-handlebars --save 在 powershell 中
我遇到一个问题,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'\nRun 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));\nRun 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 });\nRun 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我正在使用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
我正在使用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'
当我将一个选项对象传递给它时: …
我试图获取用户在表单字段中输入的详细信息,以便我可以编辑和更新所选记录。但是,当我单击编辑按钮时,我在表单中看到空白表单字段。
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) node.js ×9
express ×7
javascript ×2
mongoose ×2
nodemailer ×2
conditional ×1
css ×1
mongodb ×1