express相關(guān)
標(biāo)簽(空格分隔): 未分類(lèi)
mac下執(zhí)行
sudo ./mongod
必須加sudo
-
mongdb的基本操作
-
show dbs
顯示當(dāng)前數(shù)據(jù)庫(kù) -
use xx(dbName)
使用數(shù)據(jù)庫(kù) -
db.cat.find()
-
-
sql mongodb table collection row document primaryKey primaryKey(id) mongodb基本概念 數(shù)據(jù)庫(kù)概念不變
sql mongodb table collection row document primaryKey primaryKey(id) -
數(shù)據(jù)庫(kù)操作
var mongoose = require('mongoose'); var saveData=function(){ mongoose.connect('mongodb://localhost/test'); var Cat = mongoose.model('Cat', { name: String }); var kitty = new Cat({ name: 'Zildjian' }); kitty.save(function (err) { if (err) { console.log(err); } else { console.log('meow'); } }); } module.exports=saveData
cookie和session
簡(jiǎn)單講
client請(qǐng)求server ---> server按照一定規(guī)則生成一個(gè)session并給客戶(hù)端set-cookie,服務(wù)端維持一個(gè)session表(缺點(diǎn):集群怎么辦) ---> 客戶(hù)端每次帶過(guò)去cookie坞古,服務(wù)器就可以知道哪些訪(fǎng)問(wèn)過(guò)了(實(shí)現(xiàn)記住狀態(tài))
express實(shí)現(xiàn)
var cookieParser = require('cookie-parser');
...
app.use('/cookie',function(req,res){
if(req.cookies.isVisited){
console.log(req.cookies)
res.send("歡迎再次訪(fǎng)問(wèn)")
}
else{
res.cookie("isVisited",1,{
maxAge:60*1000
})
res.send("歡迎第一次訪(fǎng)問(wèn)")
}
})
cookie可以被客戶(hù)端修改,不安全,所以我們需要在服務(wù)端實(shí)現(xiàn)seesion
express 中操作 session 要用到 express-session 這個(gè)模塊,主要的方法就是 session(options),其中 options 中包含可選參數(shù)骡和,主要有:
- name: 設(shè)置 cookie 中,保存 session 的字段名稱(chēng)相寇,默認(rèn)為 connect.sid 慰于。
- store: session 的存儲(chǔ)方式,默認(rèn)存放在內(nèi)存中唤衫,也可以使用 redis婆赠,mongodb 等。express 生態(tài)中都有相應(yīng)模塊的支持佳励。
- secret: 通過(guò)設(shè)置的 secret 字符串休里,來(lái)計(jì)算 hash 值并放在 cookie 中蛆挫,使產(chǎn)生的 signedCookie 防篡改。
- cookie: 設(shè)置存放 session id 的 cookie 的相關(guān)選項(xiàng)妙黍,默認(rèn)為
(default: { path: '/', httpOnly: true, secure: false, maxAge: null }) - genid: 產(chǎn)生一個(gè)新的 session_id 時(shí)悴侵,所使用的函數(shù), 默認(rèn)使用 uid2 這個(gè) npm 包拭嫁。
- rolling: 每個(gè)請(qǐng)求都重新設(shè)置一個(gè) cookie可免,默認(rèn)為 false。
- resave: 即使 session 沒(méi)有被修改做粤,也保存 session 值浇借,默認(rèn)為 true。
默認(rèn)保存在內(nèi)存中怕品,下面采用寫(xiě)文件方式
app.use(session({
name: "ljd",
store: new FileStore(),
secret:'I am a secret oooooo', //用來(lái)簽名
saveUninitialized: false, // 是否自動(dòng)保存未初始化的會(huì)話(huà)逮刨,建議false
resave: false, // 是否每次都重新保存會(huì)話(huà),建議false
cookie: { maxAge: 60 * 1000 }
}))
app.use('/session',function(req,res){
if(req.session.isVisit) {
req.session.isVisit++;
res.send('<p>第 ' + req.session.isVisit + '次來(lái)到此頁(yè)面</p>');
} else {
req.session.isVisit = 1;
res.send('歡迎第一次來(lái)這里');
}
})
session 的運(yùn)作通過(guò)一個(gè) session_id 來(lái)進(jìn)行堵泽。session_id 通常是存放在客戶(hù)端的 cookie 中修己,比如在 Express 中,默認(rèn)是 connect.sid 這個(gè)字段迎罗,當(dāng)請(qǐng)求到來(lái)時(shí)睬愤,服務(wù)端檢查 cookie 中保存的 session_id 并通過(guò)這個(gè) session_id 與服務(wù)器端的 session data 關(guān)聯(lián)起來(lái),進(jìn)行數(shù)據(jù)的保存和修改纹安。
這意思就是說(shuō)尤辱,當(dāng)你瀏覽一個(gè)網(wǎng)頁(yè)時(shí),服務(wù)端隨機(jī)產(chǎn)生一個(gè) 1024 比特長(zhǎng)的字符串厢岂,然后存在你 cookie 中的 connect.sid字 段中光督。當(dāng)你下次訪(fǎng)問(wèn)時(shí),cookie會(huì)帶有這個(gè)字符串塔粒,然后瀏覽器就知道你是上次訪(fǎng)問(wèn)過(guò)的某某某结借,然后從服務(wù)器的存儲(chǔ)中取出上次記錄在你身上的數(shù)據(jù)。由于字符串是隨機(jī)產(chǎn)生的卒茬,而且位數(shù)足夠 多船老,所以也不擔(dān)心有人能夠偽造。
cookie中只存sessionId并存數(shù)據(jù)圃酵,數(shù)據(jù)存在服務(wù)端
- res.render('login') 模板引擎是ejs的話(huà)不能正確render
- jade 模板 切記不可空格回車(chē)混用
參考資料: