標籤:mongo crypto 伺服器 end 分類 out get 部分 執行個體化
萬眾期待的router.js,是我現在最想寫的一個部落格。因為他包含了整個個人部落格的精髓。在這裡,所有的請求配置,返回的參數等等所做的商務邏輯都在這個檔案裡實現。
我會詳細說明這些代碼的作用,所以這篇部落格會有點長,但看完之後受益肯定也不少!
第一部分:引用檔案
formidable是一個很出名的NPM包。它在node裡作為表單內容接收做處理的一個中介軟體,功能很強大。
db.js是我在網上仿寫的一個對資料庫的統一操作的函數庫。
md5是用於資料加密的檔案(現在反對用md5加密,因為可以被破解)推薦用雜湊演算法加密的中介軟體Crypto
fs是nodejs內建的一個檔案管理,全名叫 fileSystem
moment是一個時間格式化的中介軟體
第二部分:註冊組件
app是引用Express 然後引用Express裡的get和post方法,由代碼可以看出:第一個參數是路由設定 第二個參數就是請求處理函數。而下面代碼就是引用router檔案下的showRegister函數
exprots是ES6的新寫法,可以在外面暴露這個函數,要引用這個函數前提是要引用這個檔案
也就是下面這段代碼引用
NodeJS都是回調!NodeJS都是回調!NodeJS都是回調!(重要事情說三遍)
所有請求處理函數 都會接收三個參數:request(請求),response(回應),result(結果)
nodejs裡有內建的render函數,可指定模板檔案。而檔案格式只能是ejs。
doRegister函數
首先執行個體化formidable的IncomingForm,執行個體化物件變數名為form
引用執行個體化對象下的parse方法(接收兩個參數:第一個,req,第二個,函數【我們要做的事情】)
所得到的表單資訊都在fields裡面,err參數就是錯誤資訊,files就是檔案資訊
取到值之後就定義一個變數儲存。密碼加上雙重MD5加密(然而並沒有用,還是會被人破解。MD5不再安全)
然後用db外置函數insertOne來向資料庫新增一條資料,參數:(表名字,要儲存的JSON,回呼函數)
而回呼函數裡又接收兩個參數(是不是崩潰了?是就對了,因為我當初也崩潰了。)參數:(錯誤資訊,結果)
如果錯誤則返回錯誤資訊,成功就執行session設定並返回註冊成功資訊
第三部分:登入組件
操作與doRegister函數差不多,不一樣的就是查詢資料的時候,需要匹配帳號和密碼是否正確,登入成功之後都要寫上session。
第四部分:編寫文章組件
首先訪問該URL要判斷是否有session,沒有session就是代表沒有登入,需要登入。
伺服器有session了,就渲染這個模板。
編寫文章:有人可能疑問,為什麼將文章添加到資料庫需要查詢所有的文章呢?
主要我還是想寫個自增ID,想要文章的ID號。NodeJS裡沒有自增ID。只有隨機的ID編號。
然後儲存的資料都是以JSON的格式,我都以語義化來命名,大家也看得清楚明白。
第五部分:擷取使用者地理位置群組件
在這裡我用了查詢網的API通過IP地址來判斷訪問者當前地理位置和用戶端的資訊。
因查詢網的定位不準確,我又找了個高德的遊覽器定位來做了這個功能。
這裡是在首頁使用Ajax把資料發送到NodeJS介面來儲存訪問者的當前地理位置
第六部分:分類組件
在這個分類組件裡,其餘的都是一樣,只是查詢的時候多出了個條件。classify為JavaScript,就實現了文章分類的效果。
以上。
用Node.JS+MongoDB搭建個人部落格(萬眾期待的router.js)(四)