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