Express模板引擎定制—hbs

2019-08-14  本文已影响0人  一点金光

Express模板引擎定制—hbs

(注意hbs 不是handlebars)

添加依赖:

//package.json
  "dependencies": {
  "body-parser": "~1.13.2",
  "cookie-parser": "~1.3.5",
  "debug": "~2.2.0",
  "express": "~4.13.1",
  "hbs": "~3.1.0",
  "less-middleware": "1.0.x",
  "morgan": "~1.6.1",
  "serve-favicon": "~2.3.0"
}
npm install

建立引擎:

 下面是一个简单渲染.hbs模板文件的引擎。
//app.js
var express = require('express');
var app = express();
var hbs = require('hbs');

//绑定模板路径
app.set('views', path.join(__dirname, 'views'));

//绑定引擎名称?
app.set('view engine', 'hbs');

书写模板:

//layouts.hbs 布局模板
<!DOCTYPE html>
<html>
 <head>
 <title>{{title}}</title>
 <!—实现样式放在头部-->
 {{#each cssList}}
 <link rel="stylesheet" href="{{this}}" media="screen" title="no title" charset="utf-8">
 {{/each}}
 </head>
 <body>
{{{body}}}

<!—实现脚本放在尾部-->
 {{#each jsList}}
 <script src="{{this}}" charset="utf-8"></script>
 {{/each}}
 </body>
</html>

//页面组件
//views/index.hbs 主页模板
{{>navigator}}
{{>table}}
{{>table}}

// views/errs.hbs 错页模板
<h1>{{message}}</h1>
<h2>{{error.status}}</h2>
<pre>{{error.stack}}</pre>

//控件组件
// views/components/table.hbs 表格模板
{{css '/stylesheets/style.css'}}
{{css '/stylesheets/components/table.css'}}
{{js '/jquery/dist/jquery.min.js'}}
{{js '/javascripts/components/table.js'}}
<table class="border" id="table">
 <tr>
 <td>z</td>
 <td>d</td>
 <td>l</td>
 </tr>
</table>

// views/components/navigator.hbs 导航模板
{{css '/stylesheets/style.css'}}
{{css '/stylesheets/components/navigator.css'}}
{{js '/jquery/dist/jquery.min.js'}}
{{js '/javascripts/components/navigator.js'}}
<ul class="titles border" id="navigator">
 <li class="title">防</li>
 <li class="title">诊</li>
 <li class="title">治</li>
</ul>

书写路由:

//app.js
//app.listen(8386, '127.0.0.1');//express默认的为3000
var routes = require('./routes/index');
var users = require('./routes/users');

// 门户页
app.use('/', routes);

// 用户页
app.use('/users', users);

// 错页

// 开发环境输出err
if (app.get('env') === 'development') {

 app.use(function(err, req, res, next) {
 res.status(err.status || 500);
 res.render('error', {
   message: err.message,
 error: err
 });
 });
}

//产品环境
app.use(function(err, req, res, next) {
 res.status(err.status || 500);
  res.render('error', {
  message: err.message,
 error: {}
 });
});

module.exports = app;

// routes/index.js
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
 res.render('index', { title: 'zwys' });
});

module.exports = router;

// routes/users.js
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
 res.send('respond with a resource');
});

module.exports = router;

书写扩展:

//实现样式资源收集,去重,统一放在head头部
hbs.registerHelper('css', function(str, option) {
  var cssList = this.cssList || [];
  if(cssList.indexOf(str)<0) {
    cssList.push(str);
  }

  this.cssList = cssList.concat();
});

//实现脚本资源收集,去重,统一放在body尾部
hbs.registerHelper('js', function(str, option) {
  var jsList = this.jsList || [];
  if(jsList.indexOf(str)<0) {
   jsList.push(str);
  }

  this.jsList = jsList.concat();
});

//分页目录
hbs.registerPartials(__dirname + '/views/components');

//站点图标

var favicon = require('serve-favicon');
app.use(favicon(**__dirname + '/public/favicon.ico'));**

//日志设置

var morgan =  require('morgan');
app.use(morgan('dev'));

//请求体析

var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

/*
app.post('/api/users', bodyParser.json(), function (req, res) {

 if (!req.body) return res.sendStatus(400)

 // create user in req.body

});
*/

//Cookie设置

var cookieParser = require('cookie-parser');
app.use(cookieParser());

查看效果:

http://127.0.0.1:3000/users
http://127.0.0.1:3000
http://127.0.0.1:3000/hi

上一篇下一篇

猜你喜欢

热点阅读