express+mongo搭建博客完成用戶注冊、登錄、登出,發(fā)表文章,上傳圖片等功能
保存登錄狀態(tài):使用express-session中間件來保存user,req.session.user = user,登出之后直接對req.session.user設(shè)為null
校驗登錄:某些操作比如發(fā)表文章需要在用戶登錄之后才能進行,為了避免用戶沒有登錄直接進入相應地址進行操作,所以在進入相應地址之前進行登錄判斷,通過對req.session.user的判斷然后進行跳轉(zhuǎn)到login頁面或者移交控制權(quán)next()
上傳圖片:引入multer模塊,然后設(shè)置destination輸出路徑和filename 輸出文件名,之后我們使用form表單來提交inputfile文件,form屬性中需要加入enctype="multipart/form-data",表單中enctype="multipart/form-data"的意思,是設(shè)置表單的MIME編碼。默認情況,這個編碼格式是application/x-www-form-urlencoded,不能用于文件上傳;只有使用了multipart/form-data,才能完整的傳遞文件數(shù)據(jù),進行下面的操作. enctype="multipart/form-data"是上傳二進制數(shù)據(jù); form里面的input的值以2進制的方式傳過去
文章模塊:Post構(gòu)造函數(shù)屬性為:title,name(用戶名),head(頭像),post(內(nèi)容),存入數(shù)據(jù)庫的object額外添加time,comments,pv,reprint_info,pv通過查詢時對pv數(shù)值+1來實現(xiàn),reprint_info轉(zhuǎn)載時通過設(shè)置reprint_to,reprint_from來保存文章來源以及被別人使用情況,當用戶轉(zhuǎn)載文章時通過查詢相應文章然后以新文章錄入到數(shù)據(jù)庫中,并根據(jù)使用者信息和作者信息對轉(zhuǎn)載文章以及原文的數(shù)據(jù)進行更新
https知識:
之前在別人郵箱中看到全站https升級,了解下為什么要升級到https,什么是https
http的不足之處:通信使用明文,內(nèi)容可能會被竊聽;不驗證通信方的身份,因此有可能遭遇偽裝;無法證明報文的完整性所以有可能已遭篡改
http+加密+認證+完整性保護=https,https并非是應用層的一種新協(xié)議,只是http通信接口部分用ssl和tls協(xié)議代替而已,通常http直接和tcp通信,當使用ssl時,則演變成先和ssl通信,再由ssl和tcp通信了,簡言之,所謂的https其實就是身披ssl協(xié)議這層外殼的http
學習nodejs:
assert模塊:使用該模塊來為應用編寫單元測試,對預期值與實際值進行比較,可以使用equal和notEqual分別做相等性和不等性,相當于==和!==,會進行類型轉(zhuǎn)換再比較,如果使用strictEqual就相當于===不會進行類型轉(zhuǎn)換,當比較object對象的時候可以用deepEqual,
buffer模塊:js中string對象存儲的是字符串unicode編碼,而我們在利用nodejs做服務器開發(fā)的時候,http、tcp、文件io都是傳輸?shù)淖止?jié)流,所以這里就需要用到buffer,他代表一個緩沖區(qū),存儲二進制數(shù)據(jù)。我們可以對緩沖區(qū)進行讀寫buf.write(),buf.toString(),緩沖區(qū)是有長度的,在創(chuàng)建時就固定了下來,創(chuàng)建之后不能改變。當我們要確定字符串在緩沖區(qū)中占的長度是不能使用string.length,這是utf8的編碼,一個字符可能在buffer中占用多個字節(jié)。
fs模塊:我們可以通過fs模塊對文件進行各種操作,所有的操作都有異步和同步,而同步可能會造成io阻塞。我們可以通過fs.readFile()按照我們需要的編碼格式進行讀取文件內(nèi)容,可以使用fs.writeFile將數(shù)據(jù)寫入文件,如果文件原先存在,則會將文件替換掉;如果想在文件尾部添加內(nèi)容可以使用fs.appendFile,同時我們可以使用fs模塊創(chuàng)建目錄刪除目錄創(chuàng)建文件監(jiān)聽文件等