最好用的koa2+mysql的RESTful API脚手架,mvc架构,支持node调试,pm2部署。
生活随笔
收集整理的這篇文章主要介紹了
最好用的koa2+mysql的RESTful API脚手架,mvc架构,支持node调试,pm2部署。
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
#基于webpack構(gòu)建的?Koa2?restful?API?服務(wù)器腳手架 這是一個(gè)基于?Koa2?的輕量級(jí)?RESTful?API?Server?腳手架,支持?ES6,?支持使用TypeScript編寫。 GIT地址:https://github.com/Allenzihan/koa2-mysql-framework.git
此腳手架只安裝了一些配合koa2使用的必要插件,不僅提供RESTful?API實(shí)現(xiàn),同時(shí)也集成了對(duì)靜態(tài)資源的處理,支持跨越,代理轉(zhuǎn)發(fā)請(qǐng)求等基礎(chǔ)功能。基本上您僅需要關(guān)注您的業(yè)務(wù)開發(fā)即可。
腳手架可以根據(jù)不同的環(huán)境配置不同的信息運(yùn)行價(jià)值,支持開發(fā),測(cè)試,生產(chǎn)環(huán)境的不同參數(shù)配置。
?#數(shù)據(jù)庫選型MySQL
當(dāng)然你也可以根據(jù)需要配置其他的關(guān)系型數(shù)據(jù)庫,可擴(kuò)展?sequelize.js?作為?PostgreSQL,?MySQL,?MariaDB,?SQLite,?MSSQL?關(guān)系型數(shù)據(jù)庫的?ORM,本框架使用MVC分成模式實(shí)現(xiàn),事例上通過SQL去實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的增、刪、查、改操作。?##?目錄結(jié)構(gòu)說明
```bash
├──?README.md ├──?.babelrc????????????????????#?Babel?配置文件 ├──?.gitignore??????????????????#?Git?忽略文件列表 ├──?package.json????????????????#?描述文件 ├──?process.config.js???????????#?pm2?部署示例文件 ├──?bin?????????????????????????#?bin入口目錄 │???└──?www?????????????????????#?啟動(dòng)文件入口 ├──?.vscode?????????????????????#?VS?CODE?調(diào)式目錄 │???└──?launch.json?????????????#?調(diào)試配置 ├──?config??????????????????????#?配置文件 │???├──?db.config.js????????????#?數(shù)據(jù)庫配置文件 │???├──?logger.config.js????????#?日志配置文件 │???├──?proxy.config.js?????????#?代理配置文件 │???└──?session.config.js???????#?session配置文件 ├──?src?????????????????????????#?源代碼目錄,編譯后目標(biāo)源代碼位于?dist?目錄 │???├──?app.js??????????????????#?入口文件 │???├──?files???????????????????#?存放文件目錄 │???├──?middleware??????????????#?中間件目錄 │???????└──?errorRouteCatch.js??#?示例插件?-??router異常處理 │???├──?utils???????????????????#?工具類目錄 │???├──?controllers?????????????#?控制器 │???????└──?usersController.js??#?示例users控制器 │???├──?models??????????????????#?模型層 │???├──?routes??????????????????#?路由層 │?????????└──?users.js??????????#?示例users路由 │???└──?services????????????????#?服務(wù)層 │?????????└──?usersService.js???#?示例users服務(wù)層 ├──?public??????????????????????#?靜態(tài)資源目錄 └──?logs????????????????????????#?日志目錄 ```?
##?開發(fā)使用說明?
```bash git?clone?https://github.com/Allenzihan/koa2-mysql-framework.git?
cd?mv?koa2-mysql-framework npm?install npm?run?dev?
訪問:?http://127.0.0.1:3000/home ``` ##?開發(fā)調(diào)試說明?
支持VSCODE調(diào)試?Node.js功能,已經(jīng)配置好,?啟動(dòng)VSCODE?IDE?上的Debug按鈕即可調(diào)試
?
##?PM2?部署說明 提供了?PM2?部署?RESTful?API?Server?的示例配置,位于“process.config.js”文件中。?
process.config.js?文件提供了兩套環(huán)境的配置,分別是測(cè)試環(huán)境和生產(chǎn)環(huán)境的配置?
啟動(dòng)測(cè)試環(huán)境: npm?run?uat?
如果啟動(dòng)失敗,使用pm2?直接啟動(dòng) pm2?start?process.config.js?--only?uat?
啟動(dòng)生產(chǎn)環(huán)境: npm?run?prod?
如果啟動(dòng)失敗,使用pm2?直接啟動(dòng) pm2?start?process.config.js?--only?prod?
以上使用pm2啟動(dòng),需提前安裝好pm2模塊 PM2?配合?Docker?部署說明:?http://pm2.keymetrics.io/docs/usage/docker-pm2-nodejs/?
###?關(guān)于?Token?使用的特別說明(JWT?身份認(rèn)證)?
app.use(jwt({? secret:?publicKey.toString() }).unless({ path:?[ /^\/users\/login/, /^\/home/, /^\/assets/ ]? }))?
在?path?里面的開頭路徑則不進(jìn)行身份認(rèn)證,否則都將進(jìn)行??鑒權(quán)。?
前端處理方案:?
```javascript import?axios?from?'axios' import?{?getToken?}?from?'./tool'?
const?DevBaseUrl?=?'http://127.0.0.1:8080' const?ProdBashUrl?=?'https://xxx.xxx'?
let?config?=?{ baseURL:?process.env.NODE_ENV?!==?'production'???DevBaseUrl?:?ProdBashUrl?//?配置API接口地址 }?
let?token?=?getToken() if?(token)?{ config.headers?=?{?Authorization:?'Bearer?'?+?token?} }?
let?request?=?axios.create(config)?
//?http?request?攔截器 axios.interceptors.request.use( config?=>?{ if?(window)?{ let?token?=?getToken() if?(token)?{ //?判斷是否存在token,如果存在的話,則每個(gè)http?header都加上token config.headers.Authorization?=?`Bearer?${token}` } } //?if?(config.method?===?'get')?{ //???config.url?=?config.url?+?'timestamp='?+?Date.now().toString() //?} return?config }, err?=>?{ return?Promise.reject(err) } )?
export?default?request ```?
`tool.js`文件?
```javascript //?寫?cookies export?let?setCookie?=?function?setCookie(name,?value,?time)?{ if?(time)?{ let?strsec?=?getsec(time) let?exp?=?new?Date() exp.setTime(exp.getTime()?+?parseInt(strsec)) document.cookie?= name?+?'='?+?escape(value)?+?';expires='?+?exp.toGMTString() }?else?{ document.cookie?=?name?+?'='?+?escape(value) } }?
//?讀?cookies export?let?getCookie?=?function(name)?{ let?reg?=?new?RegExp('(^|?)'?+?name?+?'=([^;]*)(;|$)') let?arr?=?document.cookie.match(reg) return?arr???unescape(arr[2])?:?null }?
//?刪?cookies export?let?delCookie?=?function(name)?{ var?exp?=?new?Date() exp.setTime(exp.getTime()?-?1) var?cval?=?getCookie(name) if?(cval?!=?null)?{ document.cookie?=?name?+?'='?+?cval?+?';expires='?+?exp.toGMTString() } }?
//?獲取Token export?let?getToken?=?function()?{ if?(window.sessionStorage?&&?window.sessionStorage.Bearer)?{ return?window.sessionStorage.Bearer }?else?if?(window.localStorage?&&?window.localStorage.Bearer)?{ return?window.localStorage.Bearer }?else?if?(window.document.cookie)?{ return?getCookie('Bearer') } }?
//?設(shè)置Token export?let?setToken?=?function(token,?rememberTime)?{ if?(window.sessionStorage)?{ window.sessionStorage.Bearer?=?token }?
if?((rememberTime?&&?window.localStorage)?||?!window.sessionStorage)?{ window.localStorage.Bearer?=?token }?
if?( window.document.cookie?&& !window.sessionStorage?&& !window.localStorage )?{ if?(rememberTime)?{ setCookie('Bearer',?token,?rememberTime) }?else?{ setCookie('Bearer',?token) } } }?
//?刪除Token export?let?delToken?=?function()?{ if?(window.sessionStorage?&&?window.sessionStorage.Bearer)?{ window.sessionStorage.removeItem('Bearer') }?
if?(window.localStorage?&&?window.localStorage.Bearer)?{ window.localStorage.removeItem('Bearer') }?
if?(window.document.cookie)?{ delCookie('Bearer') } } ```?
大概原理: 通過某個(gè)?API(通常是登錄?API)獲取成功后的?Token,存于本地,然后每次請(qǐng)求的時(shí)候在?Header?帶上`Authorization:?"Bearer?"?+?token`,通常情況下無需擔(dān)心本地?Token?被破解。 GIT地址:? https://github.com/Allenzihan/koa2-mysql-framework.git?
轉(zhuǎn)載于:https://www.cnblogs.com/allen-tech/p/11382443.html
總結(jié)
以上是生活随笔為你收集整理的最好用的koa2+mysql的RESTful API脚手架,mvc架构,支持node调试,pm2部署。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二次幂权限设计
- 下一篇: 《卧龙》捏脸有黑人引热议 网友:黑人也要