Node.js從零開發Web Server博客項目筆記

代碼運行流程

首先開啓服務器,在npm run dev的時候運行了bin目錄下的www.js文件,啓動http服務

當前端進行訪問的時候,經過app.js文件

App.js是整個項目的入口文件,首先判斷這個用戶在http的header頭中帶了那些驗證的信息,例如帶了userid(cookie),有userid就賦值給req.session和存入redis,沒有就創建一個

驗證完信息後,進入每個模塊的處理區間,例如博客、用戶

例如進入到了博客區間,通過router文件blog.js,通過req.query獲取到路由,進入到當前的路由區間

通過req.body或req.query獲取接口的參數,調用控制器的方法,根據參數處理數據

通過封裝的處理數據模塊返回固定的數據格式(succesfulModel、errorModel)

App.js中調用handleBlogRouter獲取到處理後的數據,轉換爲字符串,然後返回給前端

Cookie

什麼是cookie,cookie是存在瀏覽器的一段字符串,格式k1=v1;k2=v2;可存儲結構化數據

Cookie的大小,5kb

Cookie不允許跨域,跨域不共享

每次發送http請求,會將請求域的cookie一起發送給server

Server端可以修改cookie,並返回給瀏覽器

瀏覽器也可以修改cookie,通過document.cookie,可以限制瀏覽器對cookie的寫入,寫入的不能覆蓋受限制的cookie

Cookie中不要暴露用戶的敏感信息

Session

Session中存儲用戶的信息,通過cookie中獲取到的信息,查詢出需要驗證的信息

Session存放在數據庫中,如果存儲在進程的內存中,會導致進程卡死,緩慢

正式上線會啓用多進程,多進程中的內存無法共享

系統會限制進程的內存

Redis

Web server最常用的緩存數據庫,數據存放在內存中

相比mysql讀取速度快(內存讀取的速度比硬盤快的多)

成本高,可存儲的數據量更少

Nginx

Nginx反向代理,安裝nginx,配置nginx.conf文件

記錄日誌

日誌有可能比較大,存儲在redis或mysql中都不太合適,存在redis中,如果文件比較大,相對會消耗內存,導致程序卡頓或緩慢,存儲在mysql中,讀取和查看不方便,不如文件直接,遷移到其他服務器,又要搭建mysql環境等

存在在文件中,解決文件過大的問題,通過管道的方式進行傳輸,一點一點的流到需要接收的端

做定時任務,使用linux的crontab,*****command, 分 時 天 月 星期 命令

日誌逐行讀取,使用readline

Server安全

預防sql攻擊,例如註釋掉部分條件語句,通過傳進來的sql

Xss攻擊,往服務器中添加js代碼,預防主要是過濾掉<>尖括號,轉換成html格式,安裝xss

密碼加密

萬一數據庫被攻破,最不應該泄露的就是用戶信息

攻擊方式:獲取用戶名和密碼,再去嘗試登錄其他系統

預防措施:進行密碼加密,致使拿到密碼也不知道明文

在這裏插入圖片描述
github倉庫地址:https://github.com/Sun-Traget/Node.js-Web-Server.git

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章