最好用的koa2+mysql的RESTful API腳手架,mvc架構,支持node調試,pm2部署。

#基于webpack構建的?Koa2?restful?API?服務器腳手架
這是一個基于?Koa2?的輕量級?RESTful?API?Server?腳手架,支持?ES6,?支持使用TypeScript編寫。
GIT地址:https://github.com/Allenzihan/koa2-mysql-framework.git

此腳手架只安裝了一些配合koa2使用的必要插件,不僅提供RESTful?API實現,同時也集成了對靜態資源的處理,支持跨越,代理轉發請求等基礎功能。基本上您僅需要關注您的業務開發即可。

腳手架可以根據不同的環境配置不同的信息運行價值,支持開發,測試,生產環境的不同參數配置。

?#數據庫選型MySQL

當然你也可以根據需要配置其他的關系型數據庫,可擴展?sequelize.js?作為?PostgreSQL,?MySQL,?MariaDB,?SQLite,?MSSQL?關系型數據庫的?ORM,本框架使用MVC分成模式實現,事例上通過SQL去實現對數據庫的增、刪、查、改操作。

?##?目錄結構說明

```bash

├──?README.md
├──?.babelrc????????????????????#?Babel?配置文件
├──?.gitignore??????????????????#?Git?忽略文件列表
├──?package.json????????????????#?描述文件
├──?process.config.js???????????#?pm2?部署示例文件
├──?bin?????????????????????????#?bin入口目錄
│???└──?www?????????????????????#?啟動文件入口
├──?.vscode?????????????????????#?VS?CODE?調式目錄
│???└──?launch.json?????????????#?調試配置
├──?config??????????????????????#?配置文件
│???├──?db.config.js????????????#?數據庫配置文件
│???├──?logger.config.js????????#?日志配置文件
│???├──?proxy.config.js?????????#?代理配置文件
│???└──?session.config.js???????#?session配置文件
├──?src?????????????????????????#?源代碼目錄,編譯后目標源代碼位于?dist?目錄
│???├──?app.js??????????????????#?入口文件
│???├──?files???????????????????#?存放文件目錄
│???├──?middleware??????????????#?中間件目錄
│???????└──?errorRouteCatch.js??#?示例插件?-??router異常處理
│???├──?utils???????????????????#?工具類目錄
│???├──?controllers?????????????#?控制器
│???????└──?usersController.js??#?示例users控制器
│???├──?models??????????????????#?模型層
│???├──?routes??????????????????#?路由層
│?????????└──?users.js??????????#?示例users路由
│???└──?services????????????????#?服務層
│?????????└──?usersService.js???#?示例users服務層
├──?public??????????????????????#?靜態資源目錄
└──?logs????????????????????????#?日志目錄
```

?

##?開發使用說明

?

```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
```
##?開發調試說明

?

支持VSCODE調試?Node.js功能,已經配置好,?啟動VSCODE?IDE?上的Debug按鈕即可調試



##?開發環境
npm?run?dev

?

##?PM2?部署說明
提供了?PM2?部署?RESTful?API?Server?的示例配置,位于“process.config.js”文件中。

?

process.config.js?文件提供了兩套環境的配置,分別是測試環境和生產環境的配置

?

啟動測試環境:
npm?run?uat

?

如果啟動失敗,使用pm2?直接啟動
pm2?start?process.config.js?--only?uat

?

啟動生產環境:
npm?run?prod

?

如果啟動失敗,使用pm2?直接啟動
pm2?start?process.config.js?--only?prod

?

以上使用pm2啟動,需提前安裝好pm2模塊
PM2?配合?Docker?部署說明:?http://pm2.keymetrics.io/docs/usage/docker-pm2-nodejs/

?

###?關于?Token?使用的特別說明(JWT?身份認證)

?

app.use(jwt({?
secret:?publicKey.toString()
}).unless({
path:?[
/^\/users\/login/,
/^\/home/,
/^\/assets/
]?
}))

?

在?path?里面的開頭路徑則不進行身份認證,否則都將進行??鑒權。

?

前端處理方案:

?

```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,如果存在的話,則每個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')
}
}

?

//?設置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')
}
}
```

?

大概原理:
通過某個?API(通常是登錄?API)獲取成功后的?Token,存于本地,然后每次請求的時候在?Header?帶上`Authorization:?"Bearer?"?+?token`,通常情況下無需擔心本地?Token?被破解。
GIT地址:?
https://github.com/Allenzihan/koa2-mysql-framework.git

?

轉載于:https://www.cnblogs.com/allen-tech/p/11382443.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247104.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247104.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247104.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用putty在linux主機和windows主機之間拷貝文件(已測試可執行)

轉載于,請點擊 首先下載putty,putty下載地址zip, 解壓zip發現里面有plink.exe pscp.exe psftp.exe putty.exe puttygen.exe puttytel.exe等可執行文件,如果只是想要鏈接主機做一些操作那么使用putty.exe,要想要上傳 …

博客園在升級的路上,不妨更自信些,同時說說我們可以為博客園做些什么

最近,博客園在技術升級上做了積極向上的努力,雖然中間過程出現反復,但姑且先不論最終升級后客戶體驗方面的提升,在升級過程中探索排查問題和解決問題的過程,本身就能幫助博客園團隊和廣大用戶積累經驗和提升能力&#…

iOS中持久化存儲SQLite(一)

在iOS中做持久化存儲有多種方案,其中包括plist, preference, sqlite, core data,其中: (1)plist, preference適合小型數據存儲,因為每次存儲前都必須將文件內容讀到內存中,因此如果數據量過大就會占用大量…

多進程相關內容

多進程相關內容 multiprocessing模塊與process類 multiprocessing python中的多線程無法利用多核優勢,如果想要充分地使用多核CPU的資源(os.cpu_count()查看),在python中大部分情況需要使用多進程。Python提供了multiprocessing。…

iOS中SQLite持久化存儲第三方庫FMDB

interface HMShopTool : NSObject (NSArray *)shops; (void)addShop:(HMShop *)shop; end implementation HMShopTool static FMDatabase *_db; (void)initialize { // 1.打開數據庫 NSString *path [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, N…

python超神之路:python異常對照表

python異常對照表 異常名稱描述BaseException所有異常的基類SystemExit解釋器請求退出KeyboardInterrupt用戶中斷執行(通常是輸入^C)Exception常規錯誤的基類StopIteration迭代器沒有更多的值GeneratorExit生成器(generator)發生異常來通知退出StandardError所有的內建標準異常…

python超神之路:創建對象的9種方法

python生成對象的9種方法 class Point:def __init__(self,x,y):self.x xself.y y import sys import copy import typespoint1 Point(1,2) point2 eval("{}({},{})".format("Point",1,2)) point3 globals()[Point](1,2) point4 locals()["Point…

面向接口的編程

面向接口的編程,將接口與實現分離,可以極大的降低代碼的耦合,比如在編程中使用的加密接口,如果將具體的加密算法寫入到使用加密的地方,這樣就會導致,下一次加密方法發生改變的時候會導致大量的地方需要修改…

ASP.NET Core Web 應用程序系列(三)- 在ASP.NET Core中使用Autofac替換自帶DI進行構造函數和屬性的批量依賴注入(MVC當中應用)...

在上一章中主要和大家分享了在ASP.NET Core中如何使用Autofac替換自帶DI進行構造函數的批量依賴注入,本章將和大家繼續分享如何使之能夠同時支持屬性的批量依賴注入。 約定: 1、倉儲層接口都以“I”開頭,以“Repository”結尾。倉儲層實現都以…

可視化caffe模型結構及在線可視化

在線可視化caffe模型結構 http://ethereon.github.io/netscope/#/editor 假設Caffe的目錄是$(CAFFE_ROOT) 1.編譯caffe的python接口 $ make pycaffe 2.裝各種依賴 $ pip install pydot $ sudo apt-get install graphviz 3.可視化模型 draw_net.py執行的時候帶三個參數 …

布式緩存系統Memcached簡介與實踐

緣起: 在數據驅動的web開發中,經常要重復從數據庫中取出相同的數據,這種重復極大的增加了數據庫負載。緩存是解決這個問題的好辦法。但是ASP.NET中的雖然已經可以實現對頁面局部進行緩存,但還是不夠靈活。此時Memcached或許是你想要的。Memca…

仿百度翻頁(轉)

https://www.cnblogs.com/fozero/p/9874334.html 轉載于:https://www.cnblogs.com/hj0711/p/11390203.html

matlab 多核并行編程

在使用matlab處理大數據,編程需要注意兩個問題:并行運算和釋放內存。matlab也提供了并行計算的功能,甚至能用GPU加速。并行計算工具箱,叫做parallel computing toolbox.它的使用方法,可以從matlab的幫助獲得。 Parall…

iOS核心動畫之CALayer(1)

本文目錄 一、什么是CALayer二、CALayer的簡單使用 回到頂部一、什么是CALayer * 在iOS系統中,你能看得見摸得著的東西基本上都是UIView,比如一個按鈕、一個文本標簽、一個文本輸入框、一個圖標等等,這些都是UIView。 * 其實UIView之所以能顯…

ASP.NET Core Web 應用程序系列(四)- ASP.NET Core 異步編程之async await

PS:異步編程的本質就是新開任務線程來處理。 約定:異步的方法名均以Async結尾。 實際上呢,異步編程就是通過Task.Run()來實現的。 了解線程的人都知道,新開一個線程來處理事務這個很常見,但是在以往是沒辦法接收線程里…

iOS核心動畫之CALayer-layer的創建

本文目錄 一、添加一個簡單的圖層二、添加一個顯示圖片的圖層三、為什么CALayer中使用CGColorRef和CGImageRef這2種數據類型,而不用UIColor和UIImage?四、UIView和CALayer的選擇五、UIView和CALayer的其他關系 * 上一講已經說過,UIView內部默…

iOS核心動畫之CALayer-隱式動畫

本文目錄 一、隱式動畫屬性二、position和anchorPoint 回到頂部一、隱式動畫屬性 * 在前面幾講中已經提到,每一個UIView內部都默認關聯著一個CALayer,我們可用稱這個Layer為Root Layer(根層)。所有的非Root Layer,也就…

多進程補充

多進程補充 僵尸進程和孤兒進程 基于unix環境(linux,macOS) 主進程需要等待子進程結束之后,主進程才結束 主進程時刻監測子進程的運行狀態,當子進程結束之后,一段時間之內,將子進程進行回收.為什么主進程不在子進程結束后馬上對其回收呢? 主進程與子進程是異步關系.主進程無法…

iOS核心動畫之CALayer-自定義層

本文目錄 一、自定義層的方法1二、自定義層的方法2 三、其他 自定義層,其實就是在層上繪圖,一共有2種方法,下面詳細介紹一下。 回到頂部一、自定義層的方法1 方法描述:創建一個CALayer的子類,然后覆蓋drawInContext:方…

iOS核心動畫之CoreAnimation

本文目錄一、Core Animation簡介二、Core Animation的使用步驟三、CAAnimation四、CAPropertyAnimation 回到頂部一、Core Animation簡介 * Core Animation,中文翻譯為核心動畫,它是一組非常強大的動畫處理API,使用它能做出非常炫麗的動畫效果…