若是沒有聽過或沒用knex的小夥伴不要緊,不要緊。html
knex是一個操做mysql的插件,用起來很是簡單node
knexjs.org/(官網文檔)mysql
www.songxingguo.com/2018/06/30/…(中文文檔) git
開發環境:github
npm init -y
複製代碼
安裝koa2
npm install koa --save
複製代碼
安裝koa-routersql
npm install koa --save
複製代碼
安裝koa-bodyparser(用於解析請求體)數據庫
npm install koa-bodyparser --save
複製代碼
安裝nodemon(讓項目能夠熱加載,每次修改代碼不用須要重啓)npm
npm install nodemon --save
複製代碼
安裝lodashjson
npm install lodash --save
複製代碼
安裝mysqlapi
npm install mysql --save
複製代碼
安裝knex
npm install knex --save
複製代碼
這是時候依賴安裝好了
代碼以下:
const Koa = require('koa')const bodyparser = require('koa-bodyparser')const response = require('./response.js')const app = new Koa()
// 使用響應處理中間件app.use(response)
// 解析請求體app.use(bodyparser())
const router = require('./routes')app.use(router.routes())
// 啓動程序,監聽端口app.listen(8888, () => { console.log('服務器啓動成功')})複製代碼
代碼以下:
module.exports = async (ctx, next) => { try { // 調用下一個 middleware await next()
// 處理響應結果 // 若是直接寫入在 body 中,則不做處理 // 若是寫在 ctx.body 爲空,則使用 state 做爲響應 ctx.body = ctx.body ? ctx.body : { code: ctx.state.code !== undefined ? ctx.state.code : 0, data: ctx.state.data !== undefined ? ctx.state.data : {} } } catch (e) { // catch 住全局的錯誤信息 // 設置狀態碼爲 200 - 服務端錯誤 ctx.status = 200
// 輸出詳細的錯誤信息 ctx.body = { code: -1, error: e && e.message ? e.message : e.toString() } }}
複製代碼
代碼以下:
const router = require('koa-router')({ prefix: '/api'})
module.exports = router複製代碼
運行 node app.js
複製代碼
代碼以下:
"start": "nodemon app.js"複製代碼
新建一個文件夾controllers,在文件內新建index.js文件(這個文件用於寫接口的邏輯代碼)
index.js代碼以下:
const _ = require('lodash')const fs = require('fs')const path = require('path')
/** * 映射 d 文件夾下的文件爲模塊 */const mapDir = d => { const tree = {}
// 得到當前文件夾下的全部的文件夾和文件 const [dirs, files] = _(fs.readdirSync(d)).partition(p => fs.statSync(path.join(d, p)).isDirectory())
// 映射文件夾 dirs.forEach(dir => { tree[dir] = mapDir(path.join(d, dir)) })
// 映射文件 files.forEach(file => { if (path.extname(file) === '.js') { tree[path.basename(file, '.js')] = require(path.join(d, file)) } })
return tree}
// 默認導出當前文件夾下的映射module.exports = mapDir(path.join(__dirname))複製代碼
html.js代碼以下:
module.exports = async (ctx) => { const html = 'hello world'
ctx.state.data = { html }}複製代碼
新建一個js文件,mysql.js
代碼以下:
var mysql = require('knex')({ client: 'mysql', connection: { host : '127.0.0.1', // IP地址 user : 'root', // 數據庫用戶名 password : '123456', // 數據庫密碼 database : 'cauth' // 鏈接到的數據庫的名字 }});
module.exports = { mysql }複製代碼
接口文件html.js的代碼
const {mysql} = require('../mysql')
module.exports = async (ctx) => { const top = await mysql('books').limit(3)
ctx.state.data = { top }}複製代碼