博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
crossplatform---Nodejs in Visual Studio Code 05.Swig+Bootstrap
阅读量:5897 次
发布时间:2019-06-19

本文共 4436 字,大约阅读时间需要 14 分钟。

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

转载于:https://www.cnblogs.com/auh2010006/p/5716981.html

你可能感兴趣的文章
思科:网络可见化仍然是安全的数字化转型改造的关键
查看>>
CloudCC CRM梳理CRM软件已经实现的发展
查看>>
《交互式程序设计 第2版》一2.3.2 数组
查看>>
移动互联网金融app 存在信息安全问题
查看>>
Android 开发中使用 SQLite 数据库
查看>>
Android后门GhostCtrl,完美控制设备任意权限并窃取用户数据
查看>>
IBM郭继军:机器学习配合行业经验将帮助企业成就未来
查看>>
Rambus9000万美元收购Inphi存储器互联业务
查看>>
3GPP一反常态提前制定NB-IoT标准有何深意?
查看>>
泉州电信推进渠道互联网化转型
查看>>
《BackTrack 5 Cookbook中文版——渗透测试实用技巧荟萃》—第3章3.6节识别操作系统...
查看>>
提供给开发者的 20 款最棒的 jQuery Bootstrap 插件 【已翻译100%】
查看>>
linux系统防火墙iptables命令规则及配置的示例
查看>>
10 个顶尖的 Linux 开源人工智能工具
查看>>
传 Android N 或取消沿用多年的应用抽屉
查看>>
Firefox 跟踪保护技术将页面加载时间减少 44%
查看>>
聚合(根)、实体、值对象精炼思考总结
查看>>
Hibernate从入门到放弃(三)----持久化对象
查看>>
Aop RealProxy 千年遇BUG
查看>>
java解析虾米音乐
查看>>