Node.js从零开发Web Server博客项目笔记
代碼運行流程
首先開啟服務(wù)器,在npm run dev的時候運行了bin目錄下的www.js文件,啟動http服務(wù)
當(dāng)前端進行訪問的時候,經(jīng)過app.js文件
App.js是整個項目的入口文件,首先判斷這個用戶在http的header頭中帶了那些驗證的信息,例如帶了userid(cookie),有userid就賦值給req.session和存入redis,沒有就創(chuàng)建一個
驗證完信息后,進入每個模塊的處理區(qū)間,例如博客、用戶
例如進入到了博客區(qū)間,通過router文件blog.js,通過req.query獲取到路由,進入到當(dāng)前的路由區(qū)間
通過req.body或req.query獲取接口的參數(shù),調(diào)用控制器的方法,根據(jù)參數(shù)處理數(shù)據(jù)
通過封裝的處理數(shù)據(jù)模塊返回固定的數(shù)據(jù)格式(succesfulModel、errorModel)
App.js中調(diào)用handleBlogRouter獲取到處理后的數(shù)據(jù),轉(zhuǎn)換為字符串,然后返回給前端
Cookie
什么是cookie,cookie是存在瀏覽器的一段字符串,格式k1=v1;k2=v2;可存儲結(jié)構(gòu)化數(shù)據(jù)
Cookie的大小,5kb
Cookie不允許跨域,跨域不共享
每次發(fā)送http請求,會將請求域的cookie一起發(fā)送給server
Server端可以修改cookie,并返回給瀏覽器
瀏覽器也可以修改cookie,通過document.cookie,可以限制瀏覽器對cookie的寫入,寫入的不能覆蓋受限制的cookie
Cookie中不要暴露用戶的敏感信息
Session
Session中存儲用戶的信息,通過cookie中獲取到的信息,查詢出需要驗證的信息
Session存放在數(shù)據(jù)庫中,如果存儲在進程的內(nèi)存中,會導(dǎo)致進程卡死,緩慢
正式上線會啟用多進程,多進程中的內(nèi)存無法共享
系統(tǒng)會限制進程的內(nèi)存
Redis
Web server最常用的緩存數(shù)據(jù)庫,數(shù)據(jù)存放在內(nèi)存中
相比mysql讀取速度快(內(nèi)存讀取的速度比硬盤快的多)
成本高,可存儲的數(shù)據(jù)量更少
Nginx
Nginx反向代理,安裝nginx,配置nginx.conf文件
記錄日志
日志有可能比較大,存儲在redis或mysql中都不太合適,存在redis中,如果文件比較大,相對會消耗內(nèi)存,導(dǎo)致程序卡頓或緩慢,存儲在mysql中,讀取和查看不方便,不如文件直接,遷移到其他服務(wù)器,又要搭建mysql環(huán)境等
存在在文件中,解決文件過大的問題,通過管道的方式進行傳輸,一點一點的流到需要接收的端
做定時任務(wù),使用linux的crontab,*****command, 分 時 天 月 星期 命令
日志逐行讀取,使用readline
Server安全
預(yù)防sql攻擊,例如注釋掉部分條件語句,通過傳進來的sql
Xss攻擊,往服務(wù)器中添加js代碼,預(yù)防主要是過濾掉<>尖括號,轉(zhuǎn)換成html格式,安裝xss
密碼加密
萬一數(shù)據(jù)庫被攻破,最不應(yīng)該泄露的就是用戶信息
攻擊方式:獲取用戶名和密碼,再去嘗試登錄其他系統(tǒng)
預(yù)防措施:進行密碼加密,致使拿到密碼也不知道明文
async await 要點
await后面可以追加promise對象,獲取resolve的值
await必須包裹在async函數(shù)里面
async執(zhí)行也是返回的也是一個promise對象
try-catch可以截獲promise中的reject的值
github倉庫地址:https://github.com/Sun-Traget/Node.js-Web-Server.git
總結(jié)
以上是生活随笔為你收集整理的Node.js从零开发Web Server博客项目笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java-instanceof和类型转换
- 下一篇: css-四种css导入方式