| Server IP : 68.183.124.220 / Your IP : 216.73.217.137 Web Server : Apache/2.4.18 (Ubuntu) System : Linux Sandbox-A 4.4.0-210-generic #242-Ubuntu SMP Fri Apr 16 09:57:56 UTC 2021 x86_64 User : gavin ( 1000) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /home/gavin/workspace/happymandarin/node_modules/express-hbs/example/ |
Upload File : |
// npm install express express-hbs
'use strict';
var express = require('express');
var app = express();
var hbs = require('..'); // should be `require('express-hbs')` outside of this example
var fs = require('fs');
var fp = require('path');
function relative(path) {
return fp.join(__dirname, path);
}
var viewsDir = relative('views');
app.use(express.static(relative('public')));
// Hook in express-hbs and tell it where known directories reside
app.engine('hbs', hbs.express4({
partialsDir: [relative('views/partials'), relative('views/partials-other')],
layoutsDir: relative('views/layout'),
defaultLayout: relative('views/layout/default.hbs')
}));
app.set('view engine', 'hbs');
app.set('views', relative('views'));
// Register sync helper
hbs.registerHelper('link', function(text, options) {
var attrs = [];
for (var prop in options.hash) {
attrs.push(prop + '="' + options.hash[prop] + '"');
}
return new hbs.SafeString('<a ' + attrs.join(' ') + '>' + text + '</a>');
});
// Register Async helpers
hbs.registerAsyncHelper('readFile', function(filename, cb) {
fs.readFile(fp.join(viewsDir, filename), 'utf8', function(err, content) {
if (err) console.error(err);
cb(new hbs.SafeString(content));
});
});
var fruits = [
{name: 'apple'},
{name: 'orange'},
{name: 'pear'}
];
var veggies = [
{name: 'asparagus'},
{name: 'carrot'},
{name: 'spinach'}
];
app.get('/', function(req, res) {
res.render('index', {
title: 'express-hbs example'
});
});
app.get('/fruits', function(req, res) {
res.render('fruits/index-layoutsDir', {
title: 'My favorite fruits',
fruits: fruits
});
});
app.get('/fruits/:name', function(req, res) {
res.render('fruits/details-layoutsDir', {
fruit: req.params.name
});
});
app.get('/veggies', function(req, res) {
res.render('veggies', {
title: 'My favorite veggies',
veggies: veggies,
layout: 'veggie'
});
});
app.get('/veggies/explicit-dir', function(req, res) {
res.render('veggies', {
title: 'My favorite veggies',
veggies: veggies,
layout: relative('views/layout/veggie')
});
});
app.get('/veggies/:name', function(req, res) {
res.render('veggies/details', {
veggie: req.params.name,
layout: 'veggie-details'
});
});
if (require.main === module) {
app.listen(3000);
console.log('Express server listening on port 3000');
} else {
module.exports = app;
}