成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

最好用的koa2+mysql的RESTful API腳手架,mvc架構(gòu),支持node調(diào)試,pm2部署

xiongzenghui / 3663人閱讀

摘要:基于構(gòu)建的服務(wù)器腳手架這是一個基于的輕量級腳手架,支持支持使用編寫。腳手架可以根據(jù)不同的環(huán)境配置不同的信息運(yùn)行價值,支持開發(fā),測試,生產(chǎn)環(huán)境的不同參數(shù)配置。

#基于webpack構(gòu)建的 Koa2 restful API 服務(wù)器腳手架

這是一個基于 Koa2 的輕量級 RESTful API Server 腳手架,支持 ES6, 支持使用TypeScript編寫。

GIT地址:https://github.com/Allenzihan...
此腳手架只安裝了一些配合koa2使用的必要插件,不僅提供RESTful API實現(xiàn),同時也集成了對靜態(tài)資源的處理,支持跨越,代理轉(zhuǎn)發(fā)請求等基礎(chǔ)功能?;旧夏鷥H需要關(guān)注您的業(yè)務(wù)開發(fā)即可。

腳手架可以根據(jù)不同的環(huán)境配置不同的信息運(yùn)行價值,支持開發(fā),測試,生產(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分成模式實現(xiàn),事例上通過SQL去實現(xiàn)對數(shù)據(jù)庫的增、刪、查、改操作。
## 目錄結(jié)構(gòu)說明

├── README.md
├── .babelrc                    # Babel 配置文件
├── .gitignore                  # Git 忽略文件列表
├── package.json                # 描述文件
├── process.config.js           # pm2 部署示例文件
├── bin                         # bin入口目錄
│   └── www                     # 啟動文件入口
├── .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ā)使用說明
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)配置好, 啟動VSCODE IDE 上的Debug按鈕即可調(diào)試

開發(fā)環(huán)境

npm run dev

PM2 部署說明

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

process.config.js 文件提供了兩套環(huán)境的配置,分別是測試環(huán)境和生產(chǎn)環(huán)境的配置

啟動測試環(huán)境:
npm run uat

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

啟動生產(chǎn)環(huán)境:
npm run prod

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

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

關(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)。

前端處理方案:

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")
  }
}
 

// 設(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")
  }
}

大概原理:
通過某個 API(通常是登錄 API)獲取成功后的 Token,存于本地,然后每次請求的時候在 Header 帶上Authorization: "Bearer " + token,通常情況下無需擔(dān)心本地 Token 被破解。

GIT地址:
https://github.com/Allenzihan...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/110007.html

相關(guān)文章

  • ONE-sys 整合前后端手架 koa2 + pm2 + vue-cli3.0 + element

    摘要:項目地址干貨求本腳手架主要致力于前端工程師的快速開發(fā)一鍵部署等快捷開發(fā)框架,主要目的是想讓前端工程師在一個阿里云服務(wù)器上可以快速開發(fā)部署自己的項目。 項目地址https://github.com/fanshyiis/... 干貨!求star showImg(https://segmentfault.com/img/remote/1460000017886870); 本腳手架主要致力于...

    劉福 評論0 收藏0
  • aotoo-hub,一體式大前端架構(gòu)

    摘要:年底了,開源一套我們的大前端架構(gòu),小伙伴們都用得很爽的。聽說的人明年會發(fā)財文檔是一套正式上線的大前端解決方案。是一套前端端彼此相親相愛不分離,你中有我,我中有你的大前端解決方案。 年底了,開源一套我們的大前端架構(gòu)aotoo-hub,小伙伴們都用得很爽的。 GITHUB -- 聽說star的人明年會發(fā)財 文檔 aotoo-hub是一套正式上線的大前端解決方案。迭代的這2年多的時間,...

    raoyi 評論0 收藏0
  • react + koa2打造點餐系統(tǒng)

    摘要:后來本人覺得太麻煩了,便抽了點時間去開發(fā)一個專為都城點餐的端系統(tǒng),主要為了方便自己。通過解析配置,通過打包生成資源,然后前端服務(wù)將資源引入到中達(dá)到渲染效果。搭建自己的服務(wù)器也有好處,可以解決跨域問題,或者通過作為中間層請求后臺服務(wù)器。 前言 第一次寫文章,用作個人記錄和分享交流,不好之處還請諒解。因本人喜愛吃都城(健康),在公司叫的外賣都是都城,然后越來越多人跟著我點,而且每次都是我去...

    enrecul101 評論0 收藏0
  • vue+koa2+mongo前后端分離restful,配置和部署到云

    摘要:前端項目使用搭建項目,這里就不發(fā)了安裝和配置或加載。目錄下文件修改來個請求,查看結(jié)果。 一。前端項目 1.使用vue-cli(vue2.0)搭建項目,這里就不發(fā)了. axios安裝和配置 ~ npm install axios 1. main.js或app.js加載axios。 import axios from axios Vue.prototype.$axios =...

    miracledan 評論0 收藏0
  • 2017年1月前端月報

    摘要:平日學(xué)習(xí)接觸過的網(wǎng)站積累,以每月的形式發(fā)布。年以前看這個網(wǎng)址概況在線地址前端開發(fā)群月報提交原則技術(shù)文章新的為主。 平日學(xué)習(xí)接觸過的網(wǎng)站積累,以每月的形式發(fā)布。2017年以前看這個網(wǎng)址:http://www.kancloud.cn/jsfron... 概況 在線地址:http://www.kancloud.cn/jsfront/month/82796 JS前端開發(fā)群月報 提交原則: 技...

    FuisonDesign 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<