Handlebars.registerHelper 函数放在 node.js 项目的什么地方?

Where to put Handlebars.registerHelper function in node.js project?

我想将 "totalPrice" 增加 10,然后将其显示在车把模板中。这是我的车把文件的一些片段。 checkout.hbs

<ul class="shipping__method">
       <li>Shipping <span>$ 10</span></li>
 </ul>
 <ul class="total__amount">
   <li>Order Total <span>Rs. {{increasePrice totalPrice}}</span></li>
</ul>

为此我在我的 app.js 文件中写了这个

  var expressHbs =  require('express-handlebars');
    app.engine('.hbs', expressHbs({ defaultLayout: 'layout', extname: '.hbs'}))
     app.set('view engine', '.hbs');
    expressHbs.registerHelper ('increasePrice', function (price) {
      price+=10;
      return price;
     })

然后我得到错误 expressHbs.registerHelper 不是函数。后来才知道要这样写

 var hbs = expressHbs.create({
 helpers: {
   increasePrice: function(price) {
     price+=20;
     return price;
   }
  }
})

然后我得到类似 "missing Helper: "increasePrice" " 的错误。

您在下面看到这段代码,使用expressexpress-handlebars的示例代码:

index.js

var express = require('express');

var app = express();

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

app.engine('.hbs', expressHbs({ defaultLayout: 'layout', extname: '.hbs'}))
app.set('view engine', '.hbs');

var hbs = expressHbs.create({});

// register new function
hbs.handlebars.registerHelper('increasePrice', function(price) {
  price+=10;
  return price;
})

app.get('/', (req, res) => {
  res.render('home', {
    layout: false,
    totalPrice: 300,
  });
})

app.listen(3000, () => {
  console.log('Server is up');
});

现在在视图中创建文件 home.hbs,并将下面的代码放在那里。

home.hbs

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>My Example APP</title>
</head>

<body>

  <ul class="shipping__method">
    <li>Shipping: Total Price <span>$ {{ totalPrice }}</span></li>
  </ul>
  <ul class="total__amount">
    <li>Order Total <span>Rs. {{increasePrice totalPrice}}</span></li>
  </ul>
</body>
</html>

从上面的代码,我希望你现在能明白,你必须把你的功能放在哪里。

举个例子:你可以在我的codesandbox

上看到

希望对您有所帮助。