用Node.JS+MongoDB搭建個人博客(萬眾期待的router.js)(四)


萬眾期待的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,就實現了文章分類的效果。

 

以上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM