Nodejs學習文件day2———express框架及cookie、session
阿新 • • 發佈:2019-02-15
express框架使用
- 安裝
- npm install express express-static
- 配置
- 建立服務 var server=express();
- 監聽 server.listen(8080);
- 處理請求 server.use('地址',function(req,res){ });
- 接收請求(3種方法)
- .get(‘/’,function(req,res){});
- .post(‘/’,function(req,res){});
- .use(‘/’,function(req,res){}); //通吃,可以接收get和post
- 相應資料
express是一個非侵入式框架
即express和原生的區別只在於express仍能使用原生的函式如res.write();和res.end();
但express比原生多了一個res.send();
這個函式可以直接傳送json資料
總的來說,express保留了原生的功能添加了一些方法,增強原有的功能
express-static用法
const expressStatic=requeire('express-static');
server.use(expressStatic('./www'));
GET/POST資料
GET-無需中介軟體 req.query
POST-需要”body-parser”
server.use(bodyParser.urlencoded({limit:xxx})); server.use(function(req,res,next){ req.body });
鏈式操作
server.use(function(req,res,next){});
server.get(function(req,res,next){}); //server.get(‘/’,function(req,res,next){});
server.post(function(req,res,next){});
next-----下一個步驟
next();
//模擬鏈式操作 server.use(‘/login’,function(){ mysql.query(function(){ if(有錯) res.emit(‘error’); else next(); }); });
中介軟體(body-parser)
next();
自己寫中介軟體
server.use(function(req,res,next){
var str=’’;
req.on(‘data’,function(data){
str+=data;
});
req.on(‘end’,function(){
req.body=querystring.parse(str);
next();
});
});
cookie和session存在的意義
http 缺點:無狀態的 兩次請求之間無法判斷是不是同一個人
cookie:
cookie:在瀏覽器儲存一些資料,每次請求都會帶過來
*不安全、有限(4k)空間非常小省著用
1.讀取——cookie-parsercookie-parser
server.use(cookieParser(‘簽名’));
server.use(function(){
req.cookies 未簽名
req.signedCookies 簽名版
});
2.傳送——cookie-session
res.secret=’字串’;
res.cookie(‘名字’,’值’,{path:’/’,maxAge:毫秒,signed:true});
3.刪除cookie
res.clearCookie(名字);
session:
session:儲存資料,儲存在服務端
*安全、無限(取決於伺服器大小)
mod:cookie-session
使用:
server.use(cookieParser());
server.use(cookieSession({
key:[]
}))
server.use(‘/’,function(){
req.session
});
刪除:delete req.session
session:基於cookie實現的
*cookie中會有一個session的ID,伺服器利用sessionid找到session檔案、讀取、寫入
隱患:session劫持
安全的session:
const express=require('express');
const cookieParser=require('cookie-parser');
const cookieSession=require('cookie-session');
var server=express();
//多個金鑰
var arr[];//定義一個空陣列
for(var i=0;i<10000;i++)
{
arr.push('sig_'+Math.random()); //1萬個隨機金鑰
}
server.use(cookieParser());
server.use(cookieSession({
name:'sess', //隨意改名
keys:arr,
maxAge:1000*3600*2
}));
//session
server.use('/',function(req,res){
if(req.session['count']==null){
req.session['count']=1;
}else{
req.session['count']++;
}
console.log(req.session['conunt']);
res.send('ok');
});
server.listen(8081);