node学习笔记三
撰写于 2017-07-05 修改于 2017-07-05
express:
1.数据
2.中间件
http-无状态的
cookie、session
cookie:在浏览器保存一些数据,每次请求都会带过来
*不安全、有限(4K)
session:保存数据,保存在服务端
*安全、无限
session:基于cookie实现的
*cookie中会有一个session的ID,服务器利用sessionid找到session文件、读取、写入
隐患:session劫持
cookie
1.读取——cookie-parser
2.发送——
session
cookie-session
cookie:
1.cookie空间非常小——省着用
2.安全性非常差
1.精打细算
2.校验cookie是否被篡改过
a.发送cookie
res.secret=’字符串’;
res.cookie(名字, 值, {path: ‘/‘, maxAge: 毫秒, signed: true});
b.读取cookie
cookie-parser
server.use(cookieParser(‘秘钥’));
server.use(function (){
req.cookies 未签名版
req.signedCookies 签名版
});
c.删除cookie
res.clearCookie(名字);
cookie-parser
cookie-encrypter
session:
cookie-session
1.写入
2.读取
session劫持
cookie-session
server.use(cookieParser());
server.use(cookieSession({
keys: [.., .., .., ..]
}));
server.use(‘/‘, function (){
req.session
});
delete req.session
1.cookie-存在浏览器,4K,不安全
签名、加密
2.session-存在服务器
不能独立存在,基于cookie
` server.use(cookieParser(‘签名字符串’));
server.use(cookieSession({
}));
server.use(function (req, res){
res.cookie(名字, 值, {signed: true});
res.cookies['user']
res.clearCookie('名字');
res.session['xxx']
delete res.session['xxx'];
});
`
模板引擎:
jade-破坏式、侵入式、强依赖
ejs-温和、非侵入式、弱依赖
html <html></html>
html <html>
head <head>
style <style></style>
</head>
body <body>
div <div></div>
div <div></div>
</body>
</html>
1.根据缩进,规定层级
2.属性放在()里面,逗号分隔
3.内容空个格,直接往后堆
属性
script(src=”a.js”)
内容
官网
a(href=”http://www.zhinengshe.com/“) 官网
<div>
xxxxx
<div>
aaaaa
...
</div>
</div>
style=”width:200px;height:200px;background:red;”
1.普通属性写法
2.用json
class=”aaa left-swrap active”
1.普通属性写法
2.用arr
简写
##
模板引擎:生成页面 ##
1.jade:破坏式
2.ejs:保留式
##
jade ##
1.根据缩进划分层级
2.属性用()表示,用逗号分隔
style={}
class=[]
3.内容
div xxx
span xxx
a(href=”xxx”) 链接
jade.render(‘字符串’);
jade.renderFile(‘模板文件名’, 参数)
jade
1.识别单双标签
注入式攻击
ejs——非侵入、非破坏
<%= name %>
<%= json.arr[0].name %>
<%= 12+5 %>
<%= ‘asdfasdf’ %>
express:
1.主体
2.cookie、session
3.数据
4.模板引擎
body-parser 解析post数据
multer 解析post文件
body-parser 解析post数据 application/x-www-form-urlencoded
server.use(bodyParse.urlencode());
req.body
multer 解析post文件 multipart/form-data
var obj=multer({dest: ‘upload/‘});
server.use(obj.any());
server.use(function (req, res){
req.files[0].originalname
req.files[0].path
});
把扩展名加上
//‘upload/aadfaew324we34’ + ‘.txt’
//‘upload/aadfaew324we34.txt’
var newName=file.path+pathLib.parse(file.originalname).ext;
fs.rename(老名, 新名, function (err){});
express整合
body-parser
multer
模板引擎
express 模板引擎
consolidate-适配
模板引擎:适配
1.consolidate
consolidate=require
server.set(‘view engine’, ‘html’);
server.set(‘views’, ‘模板文件目录’);
server.engine(‘html’, consolidate.ejs);
server.get(‘/‘, function (req, res){
res.render(‘模板文件’, 数据);
});
route-路由:
把不同的目录,对应到不同的模块
xxxx.com/aaa/ mod1
xxxx.com/news/ mod_news
post news_post
list news_list
content news_content
xxxx.com/user/ mod_users
server.get();
server.use()
server.post()
Router——迷你server
router.get();
router.post();
router.use();
Router——拆
/user/…. mod_user
/item/…. mod_item
//1.创建router
var router=express.Router();
//2.把router添加到server
server.use(‘/user’, router);
//3.router内部
router.get(‘/1.html’)
router.post(‘/2.html’)
consolidate
server.set(‘view engine’, ‘html’);
server.set(‘views’, ‘模板目录’);
server.engine(‘html’, consolidate.ejs);
server.use(function (req, res){
res.render(‘模板文件’, 数据);
});
Router——子服务
var router1=express.Router();
server.use(‘/user’, router1);
var r=express.Router();
router1.use(‘/user_mod’, r);
router1.use(‘/user_reg’, function (){});
http://www.xxxx.com/user/user_mod
http://www.xxxx.com/user/user_reg
http://www.xxxx.com/user/user_login
var router2=express.Router();
server.use(‘/news’, router2);
http://www.xxxx.com/news/list
http://www.xxxx.com/news/post
http://www.xxxx.com/news/content
var router3=express.Router();
server.use(‘/item’, router3);
http://www.xxxx.com/item/buy
http://www.xxxx.com/item/mod
http://www.xxxx.com/item/del