在视图中使用 handlebars-express 的帮助程序
use helper of handlebars-express in view
我使用 nodejs 作为后端和 handlebars-express 库
我有 3 个文件,我的 index.js、loginController.js 和 loginTemplate.handlebars
在我的 index.js 中,我声明了这样的把手
const handlebars = require('express-handlebars');
const server = express();
var hbs = handlebars.create({
helpers: {
getStringifiedJson: function (value) {
return JSON.stringify(value);
},
ifCond: function (v1, operator, v2, options) {
switch (operator) {
case '==':
return v1 == v2 ? true : false;
case '===':
return v1 === v2 ? true : false;
case '!=':
return v1 != v2 ? true : false;
case '!==':
return v1 !== v2 ? true : false;
case '<':
return v1 < v2 ? true : false;
case '<=':
return v1 <= v2 ? true : false;
case '>':
return v1 > v2 ? true : false;
case '>=':
return v1 >= v2 ? true : false;
case '&&':
return v1 && v2 ? true : false;
case '||':
return v1 || v2 ? true : false;
default:
return false;
}
},
},
layoutsDir: __dirname + '/src/views',
});
server.set('view engine', hbs);
在我的 loginController 中我有这个
const { getTemplate } = require('../services/handlebarsService');
getTemplate('loginController/loginTemplate', data).then(
(loginCompiledTemplate) => {
res.send(loginCompiledTemplate);
}
);
我的把手服务:
const handlebars = require('express-handlebars').create();
const getTemplate = async (path, data) => {
const template = await handlebars
.getTemplate(`./src/views/${path}.handlebars`)
.catch((err) => {
console.log(err);
});
return template(data);
};
module.exports = { getTemplate };
但在我看来,当我尝试调用“ifCond”时,它无法识别它,因为它给了我这个错误
{{#if campos }}
{{#each camposManuales}}
{{#ifCond this.field_type == 1 }}
a
{{/ifCond}}
{{/each}}
{{/if}}
错误:
UnhandledPromiseRejectionWarning: Error: Parse error on line 14:
.field_type == 1 }}
我该如何解决这个问题?怎么了?非常感谢你!! ^^
您不需要使用 handlebarsService
,因为您可以使用 res.render
功能,如下所示。 render
函数内部的作用与您在 handlebarsService
.
中所做的基本相同
const handlebars = require('express-handlebars');
const server = express();
var hbs = handlebars.create({
helpers: {
toJson: ...,
ifCond: ...
}
});
app.engine('handlebars', hbs.engine);
app.set('view engine', 'handlebars');
app.set('views', './views');
app.get('/', (req, res) => {
// there must be a home.html file in ./views folder
res.render('home' /*, { some: 'data' }*/);
});
app.listen(3000);
注:
create
函数创建了一个新的 handlebars 实例,因此为了让您的代码正常工作,您必须将相同的选项(助手等)传递给两个实例。
我使用 nodejs 作为后端和 handlebars-express 库
我有 3 个文件,我的 index.js、loginController.js 和 loginTemplate.handlebars
在我的 index.js 中,我声明了这样的把手
const handlebars = require('express-handlebars');
const server = express();
var hbs = handlebars.create({
helpers: {
getStringifiedJson: function (value) {
return JSON.stringify(value);
},
ifCond: function (v1, operator, v2, options) {
switch (operator) {
case '==':
return v1 == v2 ? true : false;
case '===':
return v1 === v2 ? true : false;
case '!=':
return v1 != v2 ? true : false;
case '!==':
return v1 !== v2 ? true : false;
case '<':
return v1 < v2 ? true : false;
case '<=':
return v1 <= v2 ? true : false;
case '>':
return v1 > v2 ? true : false;
case '>=':
return v1 >= v2 ? true : false;
case '&&':
return v1 && v2 ? true : false;
case '||':
return v1 || v2 ? true : false;
default:
return false;
}
},
},
layoutsDir: __dirname + '/src/views',
});
server.set('view engine', hbs);
在我的 loginController 中我有这个
const { getTemplate } = require('../services/handlebarsService');
getTemplate('loginController/loginTemplate', data).then(
(loginCompiledTemplate) => {
res.send(loginCompiledTemplate);
}
);
我的把手服务:
const handlebars = require('express-handlebars').create();
const getTemplate = async (path, data) => {
const template = await handlebars
.getTemplate(`./src/views/${path}.handlebars`)
.catch((err) => {
console.log(err);
});
return template(data);
};
module.exports = { getTemplate };
但在我看来,当我尝试调用“ifCond”时,它无法识别它,因为它给了我这个错误
{{#if campos }}
{{#each camposManuales}}
{{#ifCond this.field_type == 1 }}
a
{{/ifCond}}
{{/each}}
{{/if}}
错误:
UnhandledPromiseRejectionWarning: Error: Parse error on line 14:
.field_type == 1 }}
我该如何解决这个问题?怎么了?非常感谢你!! ^^
您不需要使用 handlebarsService
,因为您可以使用 res.render
功能,如下所示。 render
函数内部的作用与您在 handlebarsService
.
const handlebars = require('express-handlebars');
const server = express();
var hbs = handlebars.create({
helpers: {
toJson: ...,
ifCond: ...
}
});
app.engine('handlebars', hbs.engine);
app.set('view engine', 'handlebars');
app.set('views', './views');
app.get('/', (req, res) => {
// there must be a home.html file in ./views folder
res.render('home' /*, { some: 'data' }*/);
});
app.listen(3000);
注:
create
函数创建了一个新的 handlebars 实例,因此为了让您的代码正常工作,您必须将相同的选项(助手等)传递给两个实例。