当前位置:首页 > 技术分析 > 正文内容

express开发(二)引入handlebars

ruisui881个月前 (03-24)技术分析4

下面我们将在项目中引入handlebars,一种抽象程度较低的模板框架。Handlebars不会视图对HTML进行抽象:你编写的是带特殊标签的HTML,Handlebars可以借此插入内容。相比于jade(现在已经改名为pug),虽然jade足够简洁,语法精简,但是对HTML进行了相当程度的抽象,必须对HTML有很深的理解才能良好的驾驭,而且我也不喜欢HTML被抽象化处理。所以,让我们愉快的用handlebars吧。

在express使用handlebars推荐使用express-handlebars,直接运行命令

npm install -S express-handlebars

之后在我们的demo.js(也就是上一章中的mydemo.js,我将他改名为demo.js方便些,通常意义下的app.js)中,引入如下代码。

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

var hbs = exphbs.create({

layoutsDir: path.join(__dirname, 'views/layouts/'),

defaultLayout: 'layout',

extname: '.hbs',

partialsDir: path.join(__dirname, "views/partials/"),

});

// Register `hbs.engine` with the Express app.

app.engine('hbs', hbs.engine);

app.set('view engine', 'hbs');

写好后我们在views中创建几个文档,如下

这里我们使用实例方法引入handlebars,与直接使用exhbs引入是一样的效果。layoutDir是存放模板的目录;extname是我们设置的文件后缀,注意如果要设置后缀为html,那么app.engine('hbs',hbs.engine)要改为app.engine('html',hbs.engine),同理app.set中也要做相应修改。defaultLayout是默认的模板名,这里我设置的是layout;partials是局部模块,可以使用

{{>header}}

语法引入到模板layout中和页面里。

关于express-handlebars的更多介绍可以到项目主页中看

https://github.com/ericf/express-handlebars

完整的demo.js代码如下:

'use strict';

var express = require('express');

var path = require('path');

var app = express();

var mainRoute = require('./routes/main');

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

var hbs = exphbs.create({

layoutsDir: path.join(__dirname, 'views/layouts/'),

defaultLayout: 'layout',

extname: '.hbs',

partialsDir: path.join(__dirname, "views/partials/"),

});

// Register `hbs.engine` with the Express app.

app.engine('hbs', hbs.engine);

app.set('view engine', 'hbs');

app.use('/', mainRoute);

//定制404页面

app.use(function(req, res){

res.type('text/plain');

res.status('404');

res.send('404 - Not Found');

});

app.use(function(req,res){

console.err(err.stack);

res.type('text/plain');

res.status('500');

res.send('500 - Server Error');

});

app.set('port', process.env.PORT || 3000);

app.listen(app.get('port'), function(){

console.log('Express is started on http://localhost:' + app.get('port') + ';press Ctrl + C to terminate.');

});

(PS:我们引入了node中path模块来管理我们的路径,关于path大家可以看这篇文章:
http://www.jianshu.com/p/fe41ee02efc8)

这样就将handlebars引入了我们的项目。

简单的创几个hbs文件来运行验证我们做的对不对。在lauout.hbs中输入

demo

<script src="/javascripts/require.js" defer async="true" data-main="/javascripts/main"></script>

{{> header}}

{{> pages/title}}

{{{body}}}

{{> footer}}

{{{ body }}}就是路由中渲染的hbs,其他部分都是固定的模板,这里是可变的,可以是home.hbs,error.hbs。在路由中设置即可,如:

router.get('/', function(req, res, next){

res.render('home', {});

});

我们就这设置了,”/“这个路由渲染的是home.hbs但是用的模板是layout.hbs这个模板。

partials中的几个文件分别输入

footer.hbs中输入

this is footer

header.hbs中

this is header

pages中title输入

thi is title

之后在home.hbs中输入:

thi is home

之后设置路由:

router.get('/', function(req, res, next){

res.render('home', {});

});

运行node demo.js或者npm start

(PS:我在package.json中设置了"start":"supervisor demo.js",supervisor是一个node的进程守护模块,我们可以用npm install -g supervisor来全局安装他,当然也可以只在本项目中引入,也可以使用别的进程守护模块想forever等,这里我们使用supervisor。)

就可以看到localhost:3000中显示了

到这里我们已经在项目里引入了handlebars,但是还有好多handlebars的特性没介绍(helper等),如果大家想深入了解handlebars,推荐去官网上访问。

(我的项目上传到github上,并且打了标签,课程一就是class01,二几十class02,欢迎访问

https://github.com/ZZR-china/node_express)

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/2974.html

标签: res.render
分享给朋友:

“express开发(二)引入handlebars” 的相关文章

Excel VBA 收费结算模块/一步一步带你设计【收费管理系统】11

本文于2023年6月9日首发于本人同名公众号:Excel活学活用,更多文章案例请搜索关注!☆本期内容概要☆用户窗体设置:收费结算模块设置(6)增加合计金额增加收款方式选择输入大家好,我是冷水泡茶,前几期我们分享了【收费管理系统】的设计,最近一期是(Excel VBA 收费结算模块/一步一步带你设计【...

云时代,Linux和容器为王,微软推出自己的发行版Azure Linux

看到今天的微软,其前CEO史蒂夫.鲍尔默肯定会后悔在15年前说过的一句话“Linux 是一种癌症(Linux is a cancer)”。 因为今天的微软不光靠Linux赚的钵满盆满,而且还发行了自己的Linux发行版Azure Linux。为了提高其云服务和容器化服务水平,其Azure公有云平台提...

发行版Vanilla OS 2发布稳定版:彻底重写、改变使用Linux的方式

Vanilla OS 是去年崭露头角的 Linux 发行版,最初的 1.0 版本基于 Ubuntu 构建 —— 亮点之一是系统核心“不可变”。后来改用 Debian 测试分支 (Debian Sid),免费且开源,默认桌面环境是 GNOME。什么是不可变 Linux 发行版?不可变发行版确保操作系统...

Vue3 中有哪些值得深究的知识点?

众所周知,前端技术一直更新很快,这不 vue3 也问世这么久了,今天就来给大家分享下vue3中值得注意的知识点。喜欢的话建议收藏,点个关注!1、createAppvue2 和 vue3 在创建实例时,有很大的区别,具体对比如下://Vue 2 Vue.use({ router, store,...

编码 10000 个小时后,开发者悟了:“不要急于发布!”

【CSDN 编者按】在软件开发的道路上,时间是最好的老师。根据“一万小时定律”,要成为某个领域的专家,通常需要大约一万小时的刻意练习。本文作者身为一名程序员,也经历了一万小时的编程,最终悟出了一个道理:慢即是快,重视架构设计和代码质量,确保每一行代码都经得起时间的考验。作者 | Sotiris Ko...

高效使用 Vim 编辑器的 10 个技巧

在 Reverb,我们使用 MacVim 来标准化开发环境,使配对更容易,并提高效率。当我开始使用 Reverb 时,我以前从未使用过 Vim。我花了几个星期才开始感到舒服,但如果没有这样的提示,可能需要几个月的时间。这里有十个技巧可以帮助你在学习使用 Vim 时提高效率。1. 通过提高按键重复率来...