What is hbs?
The hbs package is a Handlebars view engine for Express. It allows you to use Handlebars templates to render HTML pages in your Express applications.
What are hbs's main functionalities?
Registering Partials
This feature allows you to register partials, which are reusable components that can be included in other templates. The code sample demonstrates how to register partials located in the 'views/partials' directory.
const hbs = require('hbs');
hbs.registerPartials(__dirname + '/views/partials');
Using Helpers
Helpers are functions that can be used within your templates to perform specific tasks. The code sample shows how to register a helper named 'scream' that converts text to uppercase.
const hbs = require('hbs');
hbs.registerHelper('scream', function(text) {
return text.toUpperCase();
});
Rendering Views
This feature allows you to render views using Handlebars templates. The code sample demonstrates setting up an Express application to use hbs as the view engine and rendering an 'index' view with a title.
const express = require('express');
const hbs = require('hbs');
const app = express();
app.set('view engine', 'hbs');
app.get('/', (req, res) => {
res.render('index', { title: 'Home Page' });
});
app.listen(3000);
Other packages similar to hbs
express-handlebars
express-handlebars is another Handlebars view engine for Express. It offers more features and flexibility compared to hbs, such as layout support and advanced configuration options.
pug
Pug is a high-performance template engine heavily influenced by Haml and implemented with JavaScript for Node.js and browsers. Unlike hbs, which uses Handlebars syntax, Pug uses its own unique syntax that is more concise.
ejs
EJS (Embedded JavaScript) is a simple templating language that lets you generate HTML markup with plain JavaScript. It is similar to hbs in that it integrates well with Express, but it uses a different syntax and offers different features.
hbs
Express.js view engine for
handlebars.js
Why
Because Handlebars.js is a nifty and simple templating language and makes a great fit for express templates.
Installation
npm install hbs
Usage
Using hbs as the default view engine requires just one line of code in your app setup. This will render .hbs
files when res.render
is called.
app.set('view engine', 'hbs');
To use a different extension (i.e. html) for your template files:
app.set('view engine', 'html');
app.engine('html', require('hbs').__express);
Helpers and Partials
hbs exposes the registerHelper
and registerPartial
method from handlebars.
var hbs = require('hbs');
hbs.registerHelper('helper_name', function(...) { ... });
hbs.registerPartial('partial_name', 'partial value');
See the handlebars.js README and docs for more information.
Recipes
Sometimes it is useful to have custom scripts or stylesheets on your pages. Handlebars does not provide a way to import or extend a template, but through the use of helpers you can create a similar result.
We can take advantage of the fact that our body template is processed before the layout template. Knowing this, we can create two helpers block
and extend
which can be used to 'inject' custom stylesheets or scripts into the layout template. The block
helper will act as a placeholder for values specified in earlier extend
helpers.
See examples/extend for a working example. Note how the index.hbs file defines extra stylesheets and scripts to be injected into the layout. They are put into the head section and at the end of the body respectively. If this was not done, the stylesheet would be in the body and the script would print foo bar
too soon.