• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Allenzihan/koa2-mysql-framework

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

Allenzihan/koa2-mysql-framework

开源软件地址:

https://github.com/Allenzihan/koa2-mysql-framework

开源编程语言:

JavaScript 98.0%

开源软件介绍:

#基于webpack构建的 Koa2 RESTful API 服务器脚手架 这是一个基于 Koa2 的轻量级 RESTful API Server 脚手架,支持 ES6, 支持使用TypeScript编写。

此脚手架只安装了一些配合koa2使用的必要插件,不仅提供RESTful API实现,同时也集成了对静态资源的处理,支持跨越,代理转发请求等基础功能。基本上您仅需要关注您的业务开发即可。

脚手架可以根据不同的环境配置不同的信息运行价值,支持开发,测试,生产环境的不同参数配置。

#数据库选型MySQL 当然你也可以根据需要配置其他的关系型数据库,可扩展 sequelize.js 作为 PostgreSQL, MySQL, MariaDB, SQLite, MSSQL 关系型数据库的 ORM,本框架使用MVC分成模式实现,事例上通过SQL去实现对数据库的增、删、查、改操作。

目录结构说明

.
├── 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                        # 日志目录

开发使用说明

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 里面的开头路径则不进行身份认证,否则都将进行 � 鉴权。

前端处理方案:

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文件

// 写 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 被破解。




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
BenHall/javascript-koans: Personal fork of the project, sadly I'm not the cr ...发布时间:2022-06-24
下一篇:
Cacivy/koa-typescript: 发布时间:2022-06-24
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap