最好用的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.mzph.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,使用它能做出非常炫丽的动画效果…