1. 开始
准备好Express+Swig的练习代码:https://github.com/Mengkzhaoyun/nodepractise
准备好AdminLTE后台管理模版:https://www.almsaeedstudio.com/
2. Express特性
2.1 静态文件与动态网页(Asp.Net??)
静态文件:Express示例站点包含public目录,public目录中所有内容如js、css、img、html将作为静态文件直接返回给客户端。
App.js
1
|
app.use(express.
static
(path.join(__dirname,
'public'
)));
|
动态网页:其中views和routes目录组成的内容用户发布动态网页和RestAPI。(就像是aspx和aspx.cs分开存储了一样)
App.js
1
2
3
4
5
6
7
|
// view engine setup
app.set(
'views'
, path.join(__dirname,
'views'
));
app.set(
'view engine'
,
'html'
);
app.engine(
'html'
, swig.renderFile);
app.use(
'/'
, routes);
app.use(
'/users'
, users);
|
express.nodejs == asp.net , express.nodejs几乎能做到asp.net的一切。(但貌似如何做单点登录我还不会)
2.2 内存缓存
所有ViewEngine都有内存缓存,以便于下次访问提高效率,使用Swig模版构建动态网页,搭建小中型网站时不用太担心效率问题。
3.Swig特性
3.1Template化开发网页
创建一个模版
1
2
3
4
5
6
7
8
|
<
h1
>{{ pagename|title }}</
h1
>
<
ul
>
{% for author in authors %}
<
li
{% if loop.first %} class="first"{% endif %}>
{{ author }}
</
li
>
{% endfor %}
</
ul
>
|
渲染模版
1
2
3
4
5
|
var
swig = require(
'swig'
);
swig.renderFile(
'/path/to/template.html'
, {
pagename:
'awesome people'
,
authors: [
'Paul'
,
'Jim'
,
'Jane'
]
});
|
最终结果
1
2
3
4
5
6
|
<
h1
>Awesome People</
h1
>
<
ul
>
<
li
class="first">Paul</
li
>
<
li
>Jim</
li
>
<
li
>Jane</
li
>
</
ul
>
|
3.2模版继承
使用extentds标签,继承母模版的结构,并可以用block xxx等标签,对母板的内容进行重载(很像C#的override)
1
2
3
4
5
6
7
8
|
{% extends 'layout.tpl' %}
{% block title %}{{ title }}{% endblock %}
{% block content %}
<
h1
>{{ title }}</
h1
>
<
p
>Welcome to {{ title }}</
p
>
{% endblock %}
|
4.与Bootstrap框架集成
Express+Swig完全就是个小写的Asp.Net。以前开发Asp.Net业务网站时常使用iframe,到Swig模版中完全可以使用模版继承来避免使用iframe,我仿佛看到了这个站点将会比iframe少了一半的js、css加载需求。
可以将上图的AdminLTE,顶部栏与菜单栏代码写到layout.tpl中维护,内容栏写到index.tpl进行维护,这样负责框架的来维护layout.tpl仅关心用户登录、通知、菜单加载,而不比关心内容,负责编写业务内容的也不必关心整体的框架。
Index仅编写业务代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
{% extends 'layout.tpl' %}
{% block title %}02.Swig&Bootstrap{%endblock%}
{% block body %}class="hold-transition skin-blue sidebar-collapse sidebar-mini"{%endblock%}
{% block content %}
<!-- Content Wrapper. Contains page content -->
<
div
class="content-wrapper">
<!-- Content Header (Page header) -->
<
section
class="content-header">
<
h1
>
用户管理
<
small
>查找用户进行修改</
small
>
</
h1
>
<
ol
class="breadcrumb">
<
li
><
a
href="#"><
i
class="fa fa-dashboard"></
i
> 首页</
a
></
li
>
<
li
>管理工具</
li
>
<
li
class="active">用户管理</
li
>
</
ol
>
</
section
>
<!-- Main content -->
<
section
class="content">
<!-- Your Page Content Here -->
<
div
class="row">
<
div
class="col-xs-12">
<
div
class="box box-info">
<
div
id="toolbar_account"></
div
>
<
div
class="box-body">
<
p
>用户管理 在这里填写内容</
p
>
</
div
>
</
div
>
</
div
>
</
div
>
<!-- /.row -->
</
section
>
<!-- /.content -->
</
div
>
<!-- /.content-wrapper -->
{% endblock %}
{% block script %}
<!-- AdminLTE App -->
<
script
src="plugins/AdminLTE-2.3.0-dist/js/app.min.js"></
script
>
{% endblock %}
|
下面是最终效果,将会通过{% extends 'layout.tpl' %} 继承整个母板框架的内容
下载源代码:https://github.com/Mengkzhaoyun/nodepractise
源代码路径:02.Swig&Bootstrap
5.使用Grunt发布前端代码
Grunt是一款Nodejs前端自动化工具,参考http://www.gruntjs.net/。
由于项目上的大部分业务使用IIS作为Web服务器,需要将所有写好的前端代码发布成html部署,使用Grunt,可以很轻松的做到这一切。
首先在CMD中安装Grunt-Cli命令工具
1
|
$ npm
install
grunt-cli -g
|
然后打开项目的package.json增加Grunt和Grunt-swig-template模块。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
{
"name"
:
"swigbootstrap"
,
"version"
:
"0.0.0"
,
"private"
:
true
,
"scripts"
: {
"start"
:
"node ./bin/www"
},
"dependencies"
: {
"body-parser"
:
"~1.13.2"
,
"cookie-parser"
:
"~1.3.5"
,
"debug"
:
"~2.2.0"
,
"express"
:
"~4.13.1"
,
"swig"
:
"*"
,
"morgan"
:
"~1.6.1"
,
"serve-favicon"
:
"~2.3.0"
},
"devDependencies"
: {
"grunt-swig-templates"
:
"*"
,
"grunt"
:
"*"
}
}
|
新增一个配置文件Gruntfile.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
module.exports =
function
(grunt) {
grunt.initConfig({
//将views/*.tpl编译输出为htmls/*.html
swig: {
default_options: {
options: {
templatePath:
'views/'
,
data: {
title:
'Swig Express Samples By MengkZhaoyun'
}
},
expand:
true
,
cwd:
'views/'
,
src: [
'*.tpl'
],
dest:
'htmls/'
,
ext:
'.html'
}
}
})
// 加载包含 "swig" 任务的插件。
grunt.loadNpmTasks(
'grunt-swig-templates'
);
// 默认被执行的任务列表。
grunt.registerTask(
'default'
, [
'swig'
]);
};
|
打开CMD运行Grunt命令
1
2
|
$
cd
02.Swig&Bootstrap
$ grunt
|
命令执行后多出htmls目录,下面是已编译的html
http://www.cnblogs.com/mengkzhaoyun/p/5358815.html