項目立項於2019年10月17日
操做系統:Mac os
ios
全局安裝Redis,MongoDB
git
安裝成功後,命令行輸入github
redis-server
啓動Redis
服務 Redis
默認佔用端口6379
ajax
MongoDB
默認端口是27017
redis
安裝Node.js
的RestFul
服務須要的依賴數據庫
connect-redis //鏈接redis cookie-parser //cookie解析 express //Node.js框架 express-session //express的session存儲庫 redis //redis
等依賴express
密碼密文傳輸,存儲json
利用Redis
進行持久化存儲Session
axios
須要寫入數據庫的內容能夠集中式寫入
沒有儲存session
信息的,不能訪問任何接口
使用pm2
啓動Node.js
服務,保證服務端的健壯性
每次前端會發送請求是否免密碼登錄,前往Redis
拉取數據鑑定
例如免登錄鑑權的路由:
app.get('/authentication', (req, res) => { const result = req.session; if (result) { result.login && res.send(JSON.stringify({ code: 0, data: '免登錄 ' })); return; } res.send(JSON.stringify({ code: 1, data: '須要密碼登錄 ' })); return; });
完成一個需求,先把總體架構圖看明白,再把流程圖畫出來,就成功了一半
上面的路由比較簡單,若是這我的登錄過,持久化存儲在服務端Session
信息中的login
爲true
,那麼就不須要密碼登錄,前端給予控制路由便可。
登錄路由的思路:
每次登錄,若是沒有的username
自動註冊
前端作帳戶密碼的格式化檢測
後端只負責檢測密碼是否正確、是否首次登錄等(考慮到高併發)
帳戶密碼能夠用key-value
形式存儲在Redis
中(密碼都是密文)
僞代碼以下:
redisClient.get(username, (err, value) => { if (value && password !== value) { res.send(JSON.stringify({ code: 2, data: '密碼錯誤' })); return; } if (!req.session['login' && !value]) { redisClient.set(username, password); req.session['login'] = { username, login: true, password }; res.send(JSON.stringify({ code: 0, data: '登錄成功' })); return; } res.send(JSON.stringify({ code: 0, data: '歡迎回來' }));
因爲咱們項目須要用到session持久化存儲,可是session其實本質利用了Cookie
傳輸,並且存在跨域 因此須要在axio、Node.js服務端配置容許Cookie
跨域
Axios
axios.defaults.withCredentials = true;
服務端僞代碼:
app.all('*', function(req, res, next) { res.header('Access-Control-Allow-Origin', 'http://localhost:5000'); res.header('Access-Control-Allow-Headers', 'X-Requested-With'); res.header('Access-Control-Allow-Methods', 'PUT,POST,GET,DELETE,OPTIONS'); res.header('X-Powered-By', ' 3.2.1'); res.header('Content-Type', 'application/json;charset=utf-8'); res.header('Access-Control-Allow-Credentials', 'true'); next(); });
上面項目的代碼已經編寫大體完畢,下面須要部署到阿里雲服務器
首先購買一臺輕量級服務器,選擇Node.js
環境
將Node.js
代碼經過蘋果電腦自帶的ftp
傳輸到阿里雲
輸入密碼鑑權後,
首先輸入put
而後拖入你的文件到命令行中,而後設置在阿里雲服務器中的文件路徑,回車。便可正常上傳
以後在Mac
自帶的ssh
命令行工具遠程鏈接,啓動Node.js
服務
修改Nginx
配置,反向代理80
端口--->Node.js
的服務監聽窗口
重啓Nginx便可訪問
至此,外網已經正常訪問,接口調用正常
4、前端免密登錄、路由鑑權
根組件第一次被渲染時候發送ajax請求
const result = await authentication(); if (result.code === 0) { alert('免登錄'); this.props.history.replace('/video'); } 若是有返回狀態碼 0 ,便可免登錄
5、前端用戶名,密碼格式化校驗
客戶端是一我的用,後端是一個接口不少人用
上面這句話時刻記着,若是校驗不經過,那麼就不該該有發送請求或作出某種損耗傳輸、耗時操做的能力
固然,咱們項目不使用任何UI組件庫,純原生開發,包括後面的通訊也是使用同樣,使用TCP長鏈接傳輸
6、更新一次技術架構流程圖
目前RestFul風格的服務端接口,已經部署。後面是長鏈接、靜態資源服務器的代碼部署到另一臺服務器上,而後經過GRPC+PB協議調用~
歡迎加入咱們的微信羣,關注咱們的微信公衆號:前端巔峯
也歡迎在下方給咱們贊助,開源不易,歡迎Star支持