express+mongo搭建博客完成用戶注冊(cè)顿膨、登錄翅雏、登出揣云,發(fā)表文章棘脐,上傳圖片等功能
保存登錄狀態(tài):使用express-session中間件來(lái)保存user,req.session.user = user,登出之后直接對(duì)req.session.user設(shè)為null
校驗(yàn)登錄:某些操作比如發(fā)表文章需要在用戶登錄之后才能進(jìn)行斜筐,為了避免用戶沒有登錄直接進(jìn)入相應(yīng)地址進(jìn)行操作,所以在進(jìn)入相應(yīng)地址之前進(jìn)行登錄判斷蛀缝,通過對(duì)req.session.user的判斷然后進(jìn)行跳轉(zhuǎn)到login頁(yè)面或者移交控制權(quán)next()
上傳圖片:引入multer模塊顷链,然后設(shè)置destination輸出路徑和filename 輸出文件名,之后我們使用form表單來(lái)提交inputfile文件屈梁,form屬性中需要加入enctype="multipart/form-data"嗤练,表單中enctype="multipart/form-data"的意思榛了,是設(shè)置表單的MIME編碼。默認(rèn)情況潭苞,這個(gè)編碼格式是application/x-www-form-urlencoded忽冻,不能用于文件上傳;只有使用了multipart/form-data此疹,才能完整的傳遞文件數(shù)據(jù)僧诚,進(jìn)行下面的操作. enctype="multipart/form-data"是上傳二進(jìn)制數(shù)據(jù); form里面的input的值以2進(jìn)制的方式傳過去
文章模塊:Post構(gòu)造函數(shù)屬性為:title,name(用戶名),head(頭像),post(內(nèi)容),存入數(shù)據(jù)庫(kù)的object額外添加time,comments,pv,reprint_info,pv通過查詢時(shí)對(duì)pv數(shù)值+1來(lái)實(shí)現(xiàn),reprint_info轉(zhuǎn)載時(shí)通過設(shè)置reprint_to,reprint_from來(lái)保存文章來(lái)源以及被別人使用情況蝗碎,當(dāng)用戶轉(zhuǎn)載文章時(shí)通過查詢相應(yīng)文章然后以新文章錄入到數(shù)據(jù)庫(kù)中湖笨,并根據(jù)使用者信息和作者信息對(duì)轉(zhuǎn)載文章以及原文的數(shù)據(jù)進(jìn)行更新
https知識(shí):
之前在別人郵箱中看到全站https升級(jí),了解下為什么要升級(jí)到https蹦骑,什么是https
http的不足之處:通信使用明文慈省,內(nèi)容可能會(huì)被竊聽;不驗(yàn)證通信方的身份眠菇,因此有可能遭遇偽裝边败;無(wú)法證明報(bào)文的完整性所以有可能已遭篡改
http+加密+認(rèn)證+完整性保護(hù)=https,https并非是應(yīng)用層的一種新協(xié)議捎废,只是http通信接口部分用ssl和tls協(xié)議代替而已笑窜,通常http直接和tcp通信,當(dāng)使用ssl時(shí)登疗,則演變成先和ssl通信排截,再由ssl和tcp通信了,簡(jiǎn)言之辐益,所謂的https其實(shí)就是身披ssl協(xié)議這層外殼的http
學(xué)習(xí)nodejs:
assert模塊:使用該模塊來(lái)為應(yīng)用編寫單元測(cè)試断傲,對(duì)預(yù)期值與實(shí)際值進(jìn)行比較,可以使用equal和notEqual分別做相等性和不等性智政,相當(dāng)于==和!==认罩,會(huì)進(jìn)行類型轉(zhuǎn)換再比較,如果使用strictEqual就相當(dāng)于===不會(huì)進(jìn)行類型轉(zhuǎn)換续捂,當(dāng)比較object對(duì)象的時(shí)候可以用deepEqual垦垂,
buffer模塊:js中string對(duì)象存儲(chǔ)的是字符串unicode編碼,而我們?cè)诶胣odejs做服務(wù)器開發(fā)的時(shí)候疾忍,http、tcp床三、文件io都是傳輸?shù)淖止?jié)流一罩,所以這里就需要用到buffer,他代表一個(gè)緩沖區(qū)撇簿,存儲(chǔ)二進(jìn)制數(shù)據(jù)聂渊。我們可以對(duì)緩沖區(qū)進(jìn)行讀寫buf.write(),buf.toString(),緩沖區(qū)是有長(zhǎng)度的差购,在創(chuàng)建時(shí)就固定了下來(lái),創(chuàng)建之后不能改變汉嗽。當(dāng)我們要確定字符串在緩沖區(qū)中占的長(zhǎng)度是不能使用string.length欲逃,這是utf8的編碼,一個(gè)字符可能在buffer中占用多個(gè)字節(jié)饼暑。
fs模塊:我們可以通過fs模塊對(duì)文件進(jìn)行各種操作稳析,所有的操作都有異步和同步,而同步可能會(huì)造成io阻塞弓叛。我們可以通過fs.readFile()按照我們需要的編碼格式進(jìn)行讀取文件內(nèi)容彰居,可以使用fs.writeFile將數(shù)據(jù)寫入文件,如果文件原先存在撰筷,則會(huì)將文件替換掉陈惰;如果想在文件尾部添加內(nèi)容可以使用fs.appendFile,同時(shí)我們可以使用fs模塊創(chuàng)建目錄刪除目錄創(chuàng)建文件監(jiān)聽文件等