都說node和mongodb更配但是趨勢來說的話mysql在當下會更主流,於是就去做了一些相關的demo。
node要操作mysql數據庫要安裝mysql插件
npm install mysql
這裏我考慮的不單單是操作完數據庫就完事了,我想的是直接能在整個項目架構中將msyql相關的增刪改查等一系列操作封裝到一個文件中直接引用並且解決在數據庫操作回調中不能直接返回前端參數問題。
封裝
項目越往後做越發現很多東西需要單獨拿出來放到文件裏面,這裏封裝爲什麼要用promise一會會解釋
exports.mysql = {
DBname: 'user', //數據庫名稱
userName: 'root', //mysql用戶名
password: '123456', //mysql密碼
port: '3306', //mysql端口號
host: 'localhost' //服務器ip
}
const mysql = require('mysql')
const config = require('./dbConfig')
module.exports = {
mysqlDb: (sql, param) => {
var mysqlConnect = mysql.createConnection({
host: config.mysql.host,
user: config.mysql.userName,
password: config.mysql.password,
database: config.mysql.DBname,
port: config.mysql.port
});
return new Promise((reslove,reject) => {
mysqlConnect.connect((err) => {
if (err) {
console.log('連接mysql失敗')
} else {
mysqlConnect.query(sql, param, (err, res, fields) => {
if (err) {
console.log('數據庫操作失敗')
return
}
reslove(res)
mysqlConnect.end((err) => {
if (err) {
console.log('關閉數據庫失敗')
return
}
})
})
}
})
})
}
}
這樣就封裝好了mysql數據的操作。
mysql數據庫操作
這裏說一下如果直接在數據庫的操作回調中是不能ctx.body給前端接口返回數據的,需要用await等待數據庫操作結束之後在返回數據給前端。
const mysqlConnect = require('../config/connectionMysql')
exports.mysqlDb = async (ctx) => {
let data = null
await mysqlConnect.mysqlDb('SELECT * FROM list',[]).then(res => {//查
data = res
})
ctx.body = {
data: data
}
// await mysqlConnect.mysqlDb('INSERT INTO list(name,age) VALUES(?,?)',['測試插入',12345]).then(res => {//增
// data = res
// })
// ctx.body = {
// data: data
// }
// await mysqlConnect.mysqlDb('UPDATE list SET name = ?,age = ? WHERE age = ?',['測試修改',12345,12345]).then(res => {//改
// data = res
// })
// ctx.body = {
// data: data
// }
// await mysqlConnect.mysqlDb('DELETE FROM list where age = ?',[12345]).then(res => {//刪
// data = res
// })
// ctx.body = {
// data: data
// }
}
路由
const router = require('koa-router')()
const controller = require('../db/controller')
router.get('/mysqlDb', controller.mysqlDb)