Skip to content

Commit ab78ba9

Browse files
committed
add session part
1 parent b2bd00a commit ab78ba9

2 files changed

Lines changed: 146 additions & 83 deletions

File tree

doc/day1_express.md

Lines changed: 144 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
http://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+
5885
generator是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

doc/demo/day1/node_http/http.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,7 @@ var http = require('http');
22

33
http.createServer(function(request,response){
44
console.log(request);
5+
// console.log(request.url);
6+
// console.log(request.headers['user-agent']);
57
response.end('Hello world!');
68
}).listen(8888);

0 commit comments

Comments
 (0)