都说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)