2019独角兽企业重金招聘Python工程师标准>>>

环境搭建

1
$ npm install express jade mongooes

首先需要是 node 环境,使用 npm 安装 express jademongoose, 然后使用 bower 安装 bootstrap。
安装 bower 通过 npm install bower -g, bower 是一个客户端技术的软件包管理器,它可用于搜索、安装和卸载如JavaScript、HTML、CSS之类的网络资源。

1
$ bower install bootstrap

搭建完成后目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
├── app.js  # 启动文件
├── bower_components # bower 安装的库
│   ├── bootstrap
│   └── jquery
├── node_modules # npm 安装的依赖库
│   ├── express
│   ├── jade
│   ├── moment
│   └── mongoose
├── package.json
└── views # 视图模板├── includes│   ├── head.jade│   └── header.jade├── layout.jade└── pages├── admin.jade├── detail.jade├── index.jade

创建视图

layout.jade 基础布局,所有的网页都是基于该布局

1
2
3
4
5
6
7
8
9
doctype
htmlheadmeta(charset="utf-8")title #{title}include ./includes/headbodyinclude ./includes/headerblock content

head.jade 放一些 css js 引用

1
2
3
link(href="/bootstrap/dist/css/bootstrap.min.css", rel="stylesheet")
script(src="/jquery/dist/jquery.min.js")
script(src="/bootstrap/dist/js/bootstrap.min.js")

header.jade 所有网页通用的 header

1
2
3
4
.container.row.page-headerh1 #{title}

index.jade ,主界面,影片列表

1
2
3
4
5
6
7
8
9
10
11
12
13
extends ../layoutblock content.container.roweach item in movies.col-md-2.thumbnaila(href="/movie/#{item._id}")img(src="#{item.poster}", alt="#{item.title}").captionh3 #{item.title}p: a.btn.btn-primary(href="/movie/#{item._id}", role="button") 观看预告片

detial.jade 影片详情页,展示某个影片的详细信息

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
extends ../layoutblock content.container.row.col-md-7<video width="100%" controls="" autoplay="false" name="media"><source src="#{movie.flash}"></video>.col-md-5dl.dl-horizontaldt 电影名字dd #{movie.title}dt 导演dd #{movie.director}dt 主演dd #{ movie.actor}dt 国家dd #{ movie.country}dt 语言dd #{movie.language}dt 上映年份dd #{ movie.publishTime}dt 类型dd #{movie.type}dt 简介dd #{movie.summary}

admin.jade Admin 界面,录入影片信息。

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
extends ../layoutblock content.container.rowform.form-horizontal(method="post",action="/admin/movie/new").form-grouplabel.col-sm-2.control-label(for="inputTitle") 电影名字.col-sm-10input#inputTitle.col-sm-10.form-control(type="text",name="movie[title]").form-grouplabel.col-sm-2.control-label(for="inputDirector") 导演.col-sm-10input#inputDirector.col-sm-10.form-control(type="text",name="movie[director]").form-grouplabel.col-sm-2.control-label(for="inputCountry") 国家.col-sm-10input#inputCountry.col-sm-10.form-control(type="text",name="movie[country]").form-grouplabel.col-sm-2.control-label(for="inputLanguage") 语言.col-sm-10input#inputLanguage.col-sm-10.form-control(type="text",name="movie[language]").form-grouplabel.col-sm-2.control-label(for="inputYear") 上映年份.col-sm-10input#inputYear.col-sm-10.form-control(type="text",name="movie[publishTime]").form-grouplabel.col-sm-2.control-label(for="inputSummary") 简介.col-sm-10input#inputSummary.col-sm-10.form-control(type="text",name="movie[summary]")

list.jade 影片列表编辑界面,编辑已有的文章。

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
extends ../layoutblock content.container.rowtable.table.table-hover.table-borderedtheadtrth 电影名字th 导演th 国家th 上映年份//- th 录入时间th 查看th 更新th 删除tbodyeach item in moviestr(class="item-id-#{item._id}")td #{item.title}td #{item.director}td #{item.country}td #{item.publishTime}//- td #{moment(item.meta.createdAt).format('MM/DD/YYYY')}td: a(target="_blank", herf="../movie/#{item._id}") 查看td: a(target="_blank", herf="../admin/update/#{item._id}") 修改tdbutton.btn.btn-danger.del(type="button", date-id="#{item._id}") 删除

路由

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
var express = require('express')
var path = require('path')
var port = process.env.PORT || 3000
var app = express()app.set('views','./views/pages')
app.set('view engine', 'jade')
app.use(express.static(path.join(__dirname,'bower_components')))
app.listen(port)console.log('server listening on poert:'+port)// index
app.get('/',function (req,res) {res.render('index',{title: '首页',movies: [{title: '变形金刚1',_id: 1,poster: 'https://img3.doubanio.com/view/movie_poster_cover/mpst/public/p2332503406.jpg'},{title: '变形金刚2',_id: 2,poster: 'https://img3.doubanio.com/view/movie_poster_cover/mpst/public/p2332503406.jpg'},{title: '变形金刚3',_id: 3,poster: 'https://img3.doubanio.com/view/movie_poster_cover/mpst/public/p2332503406.jpg'},{title: '变形金刚4',_id: 4,poster: 'https://img3.doubanio.com/view/movie_poster_cover/mpst/public/p2332503406.jpg'}]})
});// movie detail
app.get('/movie/:id',function (req,res) {res.render('detail',{title: '详情页',movie:{title:'美国队长3:内战',director: '安东尼·罗素 / 乔·罗素',editor : '克里斯托弗·马库斯 / 斯蒂芬·麦克菲利 / 杰克·科比 / 乔·西蒙',actor : '克里斯·埃文斯 / 小罗伯特·唐尼 / 斯嘉丽·约翰逊 / 塞巴斯蒂安·斯坦 / 安东尼·麦凯 / 更多...',type : '动作 / 科幻 / 冒险',link : 'marvel.com/captainamerica',country : '美国',language : '科萨语 / 英语 / 德语 / 俄语 / 罗马尼亚语',publishTime: ' 2016-05-06(中国大陆/美国) / 2016-04-12(加州首映)',duration : '148分钟(中国大陆) / 147分钟',alise : '美国队长3:内战 / 美国队长3:英雄内战(港/台) / 美队3 / Captain America 3',summary : '美国队长史蒂夫·罗杰斯(克里斯·埃文斯 Chris Evans 饰)带领着全新组建的复仇者联盟,继续维护世界和平。然而,一次执行任务时联盟成员不小心造成大量平民伤亡,从而激发政治压力,政府决定通过一套监管系统来管理和领导复仇者联盟。联盟内部因此分裂为两派:一方由史蒂夫· 罗杰斯领导,他主张维护成员自由,在免受政府干扰的情况下保护世界;另一方则追随托尼·斯塔克(小罗伯特·唐尼 Robert Downey Jr. 饰),他令人意外地决定支持政府的监管和责任制体系。神秘莫测的巴基(塞巴斯蒂安·斯坦 Sebastian Stan 饰)似乎成为内战的关键人物……',flash:'https://img3.doubanio.com/rda/8ffecbe972ad5cf.mp4'}})
})//admin page
app.get('/admin/movie', function (req, res) {res.render('admin', {title: 'imooc 后台录入页',movie: {director: '',country: '',title: '',publishTime: '',poster: '',language: '',flash: '',summary: ''}})
})//admin page
app.get('/admin/list', function (req, res) {res.render('list', {title: 'imooc 列表页',movies: [{director: '乔斯·韦登',country: '美国',title: '复仇者联盟2',publishTime: '2015',_id:2,poster: 'http://img31.mtime.cn/mg/2015/03/27/120537.13212993_270X405X4.jpg',language: '英语',flash: 'http://v.youku.com/v_show/id_XODc4NDY0MjA4.html',summary: '影片讲述当钢铁侠试图启动处于休眠状态的维持和平计划时,事情出了差错。于是,在地球面临生死存亡的紧急关头时,强大的超级英雄们挺身而出承担起拯救世界的重任,他们将阻止可怕的人工智能机器人“奥创”制定恐怖计划。'}]})
})

目前还是假数据,还没有使用 MongoDB。

运行 node app.js 然后再浏览器打开 http://localhost:3000

一.为什么要学习jade?

  1. 通常大部分前端开发工作者一开始步入前端开发的时候,都是直接简单的写html页面然后丢给后台开发,后台开发在来嵌入模版。
  2. 对于日益庞大的前端页面来说,还是用老的字符串拼接的方法来嵌入html内容已经不适应当下的开发趋势了。
  3. 废话不多说,直接切入正题。

二.开始装jade。

  1. jade基于nodejs的开发环境,所以我们首先要安装nodejs,nodejs的安装方法其实还是挺复杂的,所以请大家自己去百度或者google,省事可以直接去 nodejs 的官方网站下载nodejs的安装包直接安装就好了。
  2. 第二步我要安装npm包管理工具,在node环境下,不装grunt是无法开展工作的哟。
  3. 开始安装jade插件了,下面的就是安装命令。

三.开始使用jade来构建前端模版。

  1. 首先我们建立一个文件夹叫jade,然后在创建一个jade的文件叫jade.jade即可。

2.我们在jade文件内写上jade规模的模版代码,其实很好看懂。

3.上面代码估计大家都能看懂,就是创建一个常规的前端html的文件,但是规范是jade的规范,然后我们可以进入cmd命令行工具  cd到当前的文件夹,然后暴力编译当前的jade文件,会看到同目录会生成一个压缩过的html的文件。

4.压缩的过的可以通过加-P来不压缩,如果每次更改模版都要打命令行一次很麻烦是不是,我们可以通过加上jade -P -w jade.jade  加上一个-w来开启监视模式,每次更改模版,html文件都会自动编译咯。

5.我们现在来看看生成的html文件吧,是不是生成了正常的html dom树了呢?

四.熟悉jade规范。

  1. 从图上可以看出来,子级元素必须要缩进。
  2. 标签和文本必须要留有空行。

转载于:https://my.oschina.net/u/2357525/blog/687217

Express 网站开发相关推荐

  1. 个人工作室的网站开发规范V1.0

    一,概述 不论是最古老的HTML,还是最近流行的AJAX,网站开发始终是一个综合了多种最新技术的实验场.作为个人工作室,成员屈指可数,多为手工作坊,往往一个人要担任多个角色,既是前台美工,又是后台程序 ...

  2. Node.js+Express商业开发中的安全性考虑

    无论基于什么技术进行网站开发,安全性都是第一位的,特别是对于一些数据敏感性网站而言.本文引用的文章来自于Express.js官方网站,应当是每一个基于Express.js(或者基于此框架的更高级框架) ...

  3. 第4讲:C# 入门教程 入门知识(黄菊华NET网站开发、C#网站开发、Razor网站开发教程)

    入门知识 .NET.C#和ASP.NET三者之间的区别如下: 一.什么是.NET? .NET是微软公司下的一个开发平台,.NET核心就是.NET Framwork(.NET框架)是.NET程序开发和运 ...

  4. 整理网站开发规范(zhuan)

    今天在收拾资料的时候,看见了以前最早做网站时的开发规范.给大家拿出来.如果有需要的可以参考一下!谢谢! 一,概述 不论是最古老的HTML,还是最近流行的AJAX,网站开发始终是一个综合了多种最新技术的 ...

  5. Web程序设计—ASP.NET实用网站开发(第三版)课后习题答案

    Web程序设计-ASP.NET实用网站开发(第三版)课后习题答案 (沈士根.叶晓彤编著-清华大学出版社) 第一章 一.填空题: 1.NET Framework 主要包括 (CLR)和(.NET Fra ...

  6. RubyGems 库发现了后门版本的网站开发工具 bootstrap-sass

    安全研究人员在官方的 RubyGems 库发现了后门版本的网站开发工具 bootstrap-sass.该工具的下载量高达 2800 万次,但这并不意味着下载的所有版本都存在后门,受影响的版本是 v3. ...

  7. 【组队学习】【26期】编程实践(Django网站开发)

    编程实践(Django网站开发) 论坛版块: http://datawhale.club/c/team-learning/28-category/28 开源内容: https://github.com ...

  8. 轻松学HTML+CSS网站开发

    2019独角兽企业重金招聘Python工程师标准>>> <轻松学HTML+CSS网站开发>一书共分5篇. "概述篇" 主要包括网站工作机制.网页构成. ...

  9. html css网站开发兵书,程序员藏经阁--HTML+CSS网站开发兵书(附光盘)

    摘要: <HTML+CSS网站开发兵书>是一本与众不同的HTML标记语言读物,它以实际的网页为主,为读者展现了网页的组成部分及各部分的设计.其他类似的书都是以HTML标签来讲解,<H ...

最新文章

  1. 人工智能进军餐饮:AI调酒,越喝越有
  2. enumerate在python中的意思_Python中enumerate用法详解
  3. DPDK — RTE_LOG 日志模块
  4. 项目管理一般知识:单个项目的管理过程
  5. python tqdm进度条打印
  6. jzoj3302-[集训队互测2013]供电网络【上下界网络流,费用流,动态加边】
  7. python生成图片链接_python如何将两张图片生成为全景图片
  8. python添加重复元素_在Python 3.6中添加迭代时重复元素
  9. leetcode Submission Details
  10. linux 查找py文件命令_小命令大作用---linux 下快速查找
  11. 中山大学计算机线性代数第六版答案,中山大学2013线性代数第二次作业
  12. java struts2教程_Struts2学习教程之入门小白的开始基础
  13. 利用PS和抠图软件轻松换证件照背景
  14. 自然语言处理,计算机与人类“谈心”的关键
  15. python支持向量机 股票_测 python 利用SVM预测股票涨跌
  16. 年纪大了,这样转行linux运维
  17. arduino小车,准备(一):TB6612FNG电机驱动器
  18. JavaSE、JavaEE、JavaME三者之间的关系与区别
  19. DNA计算 与 肽展公式 推导 AOPM-A 变胸腺苷, AOPM-O尿胞变腺苷, AOPM-P尿胞变鸟苷, AOPM-M鸟腺苷的 S形螺旋纹 血氧峰 触发器分子式 严谨完整过程
  20. 【嵌入式热敏打印模块(1)】

热门文章

  1. SketchUp 2018 适用的联合推拉(超级推拉)扩展插件Joint Push Pull下载
  2. Android培训班(109)start_kernel函数6
  3. 21:Integer Intervals
  4. 2019年12月份统考计算机应用基础题库,2019年计算机应用基础统考题库.doc
  5. 挥金如土林黛玉 贾府里的隐形有钱人
  6. The Most Common Habits from more than 200 English Papers(中国学生写英语论文中最常见的错误)
  7. 揭开UTF-8的神秘面纱
  8. MySQL like查询后置%索引失效分析
  9. PTA 练习3-4统计字符
  10. nw.js 软件推荐:AxeSlide斧子演示:PPT的另一种可能(转)