22
33http://expressjs.com/
44
5- Express是一个基于nodejs的web框架,它是基于[ connect] ( https://github.com/senchalabs/connect ) 中间件的.
5+ Express是一个简洁、灵活的基于nodejs的web应用开发框架,它是基于[ connect] ( https://github.com/senchalabs/connect ) 中间件的。
6+
7+ 它提供一系列强大的特性,勇于创建各种Web和移动设备应用。
68
79## 为什么使用Express
810
@@ -46,15 +48,40 @@ http.createServer(function(request,response){
4648
4749### 如何手动安装
4850
49- ```
50- npm init
51- npm install --save express
52- touch app.js
53- node app.js
54- ```
51+ 新建文件夹:
52+
53+ $mkdir /getting start/app
54+
55+ ![ Mou icon] ( ./images/expressimg7.jpg )
56+
57+ cd到app下,运行:
58+
59+ $sudo npm install --save express
60+
61+ 将express安装在此目录下,新建app.js文件:
62+
63+ var express = require('express');
64+ var app = express();
65+
66+ app.get('/',function(req,res){
67+ res.send('hello,world');
68+ });
69+
70+ app.listen(5000);
71+
72+ 终端运行:
73+
74+ $node app.js
75+
76+ 开启端口,浏览器访问localhost:5000,输出:
77+
78+ ![ Mou icon] ( ./images/expressimg8.jpg )
79+
5580
5681### 如何使用generator
5782
83+ #### 安装
84+
5885generator是express命令工具集,首先确保已经安装node和npm,先在全局安装这个工具集:
5986
6087 $npm install -g express-generator
@@ -75,7 +102,11 @@ generator是express命令工具集,首先确保已经安装node和npm,先在
75102
76103![ Mou icon] ( ./images/expressimg1.jpg )
77104
78- ### 安装依赖
105+ #### express命令以及参数说明
106+
107+ TODO: by kezhi
108+
109+ #### 安装依赖
79110
80111打开package.json,可以看到依赖的模块,执行命令来下载依赖的模块:
81112
@@ -89,7 +120,7 @@ generator是express命令工具集,首先确保已经安装node和npm,先在
89120
90121![ Mou icon] ( ./images/expressimg2.jpg )
91122
92- ### 启动服务器
123+ #### 启动服务器
93124
94125回到app.js层级,执行:
95126
@@ -105,79 +136,8 @@ generator是express命令工具集,首先确保已经安装node和npm,先在
105136
106137完毕,说明express安装成功.
107138
108-
109- ## 阅读文档
110- ### getting start
111-
112- 新建文件夹:
113-
114- $mkdir /getting start/app
115-
116- ![ Mou icon] ( ./images/expressimg7.jpg )
117-
118- cd到app下,运行:
119-
120- $sudo npm install express
121-
122- 将express安装在此目录下,新建app.js文件:
123-
124- var express = require('express');
125- var app = express();
126-
127- app.get('/',function(req,res){
128- res.send('hello,world');
129- });
130-
131- app.listen(5000);
132-
133- 终端运行:
134-
135- $node app.js
136-
137- 开启端口,浏览器访问localhost:5000,输出:
138-
139- ![ Mou icon] ( ./images/expressimg8.jpg )
140-
141- ### guide
142-
143- Error handling
144-
145- 监听server服务错误,如get请求的时候输出一个没定义的变量a,这时express捕捉到错误,并返回'Something broke!':
146-
147- app.get('/',function(req,res){
148- res.send(a);
149- });
150-
151- app.use(function(err, req, res, next){
152- console.error(err.stack);
153- res.status(500).send('Something broke!');
154- });
155-
156- 终端输出:
157-
158- ![ Mou icon] ( ./images/errhadding1.jpg )
159-
160- 浏览器返回:
161-
162- ![ Mou icon] ( ./images/errhadding2.jpg )
163-
164- Debugging Express
165-
166- Expressy已经内置了debug模块,如果要用debug运行app.js:
167-
168- $DEBUG=express:* node app.js
169-
170- ![ Mou icon] ( ./images/debug1.jpg )
171-
172- ### 知道如何查api文档
173-
174- 中文文档地址
175-
176- http://www.expressjs.com.cn
177-
178139## 核心概念
179140
180- Express 是一个简洁、灵活的 node.js Web 应用开发框架, 它提供一系列强大的特性,帮助创建各种Web 和移动设备应用。
181141
182142### 理解public目录
183143
@@ -219,22 +179,60 @@ express.static不仅可以托管静态文件,并且提供接口可以拦截到
219179
220180### 请求request
221181
222- HttpServletRequest对象是有关于客户端所发出的请求的对象 ,只要是有关于客户端请求的信息,都可以藉由它来取得,例如请求标头、请求方法、请求参数、客户端IP,客户端浏览器等等信息。
182+ Request对象是有关于客户端所发出的请求的对象 ,只要是有关于客户端请求的信息,都可以藉由它来取得,例如请求标头、请求方法、请求参数、客户端IP,客户端浏览器等等信息。
223183
224184客户端发来的请求,node.js 帮我们封装成 request 对象
225185
226186在request里面我们可以获得
227187
228- -
188+ - body
189+ - header
190+ - params
191+ - query
192+ ....
229193
230194### 响应response
231195
232- HttpServletResponse对象是有关于对客户端请求之响应,您可以利用它来设定一些要响应的讯息 ,例如标题信息、响应状态码等.
196+ Response对象是有关于对客户端请求之响应,可以利用它来设定一些要响应的讯息 ,例如标题信息、响应状态码等.
233197
234198我们利用response,向客户端发送回答,说白了是向浏览器写内容。
235199
236200### session
237201
202+ 一个session就是一系列某用户和服务器间的通讯。服务器有能力分辨出不同的用户。
203+
204+ 一个session的建立是从一个用户向服务器发第一个请求开始,而以用户显式结束或session超时为结束。
205+ 其工作原理是这样的:
206+
207+ 1 . 当一个用户向服务器发送第一个请求时,服务器为其建立一个session,并为此session创建一个标识号
208+ 2 . 这个用户随后的所有请求都应包括这个标识号。服务器会校对这个标识号以判断请求属于哪个session
209+ 3 . 当用户在一段时间没有任何操作,session就会自动超时
210+
211+ 这种机制不使用IP作为标识,是因为很多机器是通过代理服务器方式上网,没法区分每一台机器。
212+
213+ 对于session标识号(sessionID),有两种方式实现:cookies和URL重写,此处不详细讲解。
214+
215+ #### express的session
216+
217+ nodejs本身不管session,因为用了express框架,express基于connect,connect中有session管理的能力。connect是插件式架构,它的插件称之为“中间件”,其中有个中间件就是叫作session。
218+
219+ 到了4.xx版本之后,session管理和cookies等许多模块都不再直接包含在express中,而是需要单独下载添加。
220+
221+
222+ https://github.com/expressjs/session
223+
224+ #### 应用场景: 登陆
225+
226+ - 在登陆页面完成用户鉴权,鉴权成功后,在session里存储用户信息
227+ - 一段时间没有任何操作,session就会自动超时,此时用户点击页面的时候,后台会判断是否存在当前用户的session
228+ - 一半超时会重定向到登陆界面,提示此操作需要用户登陆
229+
230+ #### 应用场景: 购物车
231+
232+ - 保证当前session里有用户信息,用户是登陆状态的
233+ - 用户在购物页面操作,点击加入购物车,此时在session里增加一条信息,存储当前物品信息
234+ - 用户结算的时候,从session获取物品架构和数量,计算出总价,订单完成后,清理session
235+
238236## 任务
239237
240238### 了解http协议
@@ -384,12 +382,75 @@ query处理get请求参数,整理成json各式:
384382- ` npm start ` vs ` npm test ` (scripts自定义)
385383- 如何写一个npm,以及发布
386384
385+
386+ ## 阅读文档
387+
388+ ### getting start
389+
390+ 入门文档,如果你看完了上面的内容,就可以不要看了
391+
392+ ### guide
393+
394+ 此处是开发指南,建议完全看一遍
395+
396+ Error handling
397+
398+ 监听server服务错误,如get请求的时候输出一个没定义的变量a,这时express捕捉到错误,并返回'Something broke!':
399+
400+ app.get('/',function(req,res){
401+ res.send(a);
402+ });
403+
404+ app.use(function(err, req, res, next){
405+ console.error(err.stack);
406+ res.status(500).send('Something broke!');
407+ });
408+
409+ 终端输出:
410+
411+ ![ Mou icon] ( ./images/errhadding1.jpg )
412+
413+ 浏览器返回:
414+
415+ ![ Mou icon] ( ./images/errhadding2.jpg )
416+
417+ Debugging Express
418+
419+ Expressy已经内置了debug模块,如果要用debug运行app.js:
420+
421+ $DEBUG=express:* node app.js
422+
423+ ![ Mou icon] ( ./images/debug1.jpg )
424+
425+ ### 知道如何查api文档
426+
427+ 中文文档地址
428+
429+ http://www.expressjs.com.cn
430+
431+ 如何在mac下面使用Dash查看离线文档
387432## 更多
388433
389434- connect
390435- express框架源码
391436- 反向代理(proxy,比如haproxy,nginx)
392437- 集群部署
438+ - 可以把session存储到redis等缓存中
439+
440+ ```
441+ // 设置 Session
442+ app.use(session({
443+ store: new RedisStore({
444+ host: "127.0.0.1",
445+ port: 6379,
446+ db: "test_session"
447+ }),
448+ resave:false,
449+ saveUninitialized:false,
450+ secret: 'keyboard cat'
451+ }))
452+ ```
453+ - dsdsds
393454## 总结
394455
395456
0 commit comments