连接数据库的需求是从想写写一个小小的数据查询接口开始的。想从数据库查询数据,就得先连接数据库。
这里使用mysql,数据库安装不做赘述。只说在nodejs上的操作
安装mysql插件
首先要安装Nodejs的mysql插件
npm install mysql --save
创建连接池
项目根目录下新建mysql文件夹,文件夹下新建mysql.js文件
项目根目录下创建utils文件夹,utils文件夹下创建code.js,用于定义返回数据的成功失败类型
code.js 文件
module.exports={
success:1,//成功
err:0,//失败
repeat:2,//重复
}
mysql.js文件中创建数据库连接池
const mysql = require('mysql')
const code=require('../utils/code')
console.log(mysql)
// 创建数据池
const pool = mysql.createPool({
host : '127.0.0.1', // 数据库地址
user : 'root', // 数据库用户
password : 'yanglian', // 数据库密码
database : 'labour' // 选中数据库
})
mysql.js文件中封装增删改查的数据返回格式
// params 进行添加或修改的数据
function poolFn(connecQuery, sql, params) {
// getConnection 创建连接池
return new Promise((resolve, reject) => {
pool.getConnection((err, connection) => {
if(err) {
reject('建立连接池失败')
throw err
}
connecQuery(connection, sql, params).then(data => {
connection.release() // 到这步说明已经完成操作,释放连接
resolve(data)
})
})
// console.log(pool._allConnections.length) // 连接池里的连接数
})
}
/*
* connection 连接句柄
* sql 查询语句
* */
// 基于promise方法实现
// 查询数据
function find(connection, sql) {
return new Promise((resolve, reject) => {
connection.query(sql, (err, data) => {
// console.log(data)
if(err) {
reject(err)
throw err
}
resolve(data)
})
})
}
// 添加数据
function add(connection, sql, params) {
return new Promise((resolve, reject) => {
connection.query(sql, params, (err, result) => {
if(err) {
resolve({
msg:'添加失败',
code:code.err,
data:null
})
throw err
}
resolve({
msg:'添加成功',
code:code.success,
data:null
})
})
})
}
// 删除数据
function del(connection, sql) {
return new Promise((resolve, reject) => {
connection.query(sql, (err, result) => {
if(err) {
resolve({
msg:'删除失败',
code:code.err,
data:null
})
throw err
}
resolve({
msg:'删除成功',
code:code.success,
data:null
})
})
})
}
// 修改数据
function update(connection, sql, params) {
return new Promise((resolve, reject) => {
connection.query(sql, params, (err, result) => {
if(err) {
reject(err)
throw err
}
resolve(result)
})
})
}
// 将方法封装统一导出
function queryFn(connecQuery, sql, params) {
return new Promise((resolve) => {
poolFn(connecQuery, sql, params).then(data => {
console.log(data)
resolve(data)
})
})
}
module.exports = {
findData(sql, params) {
return queryFn(find, sql, params)
},
addData(sql, params) {
return queryFn(add, sql, params)
},
delData(sql, params) {
return queryFn(del, sql, params)
},
updateData(sql, params) {
return queryFn(update, sql, params)
}
}
在mysql文件夹下创建processData.js,提供供外界调用的增删改查函数,并决定最终返回给浏览器的数据格式
process.js文件
const {
findData,
addData,
delData,
updateData
} = require('./mysql')
const code=require('../utils/code')
// 这边通过async方法保证数据的同步获取
let query = async(ctx,sql,config={}) => { // 获取数据
let {params,type='json',isObj}=config
// 返回的数据格式为json
ctx.response.type = type
await findData(sql,params).then(data => {
ctx.body = {
data:isObj ? data[0] : data,
msg:'查询成功',
code:code.success
}
})
}
let add = async(ctx,sql,config={}) => { // 添加数据
// console.log(ctx)
let {params,type='json'}=config
ctx.response.type =type
console.log(params)
await addData(sql, params).then(data => {
ctx.body = data
}, () => {
ctx.body = data
})
}
let del = async(ctx,sql,config={}) => { // 删除数据
let {params,type='json'}=config
ctx.response.type =type
await delData(sql,params).then(data => {
ctx.body = data
}, () => {
ctx.body = data
})
}
let update = async(ctx,sql,config={}) => { // 修改数据
let {params,type='json',msg='更新成功'}=config
ctx.response.type =type
await updateData(sql, params).then(data => {
// console.log(data)
ctx.body = {
data:null,
msg,
code:code.success
}
})
}
module.exports = {
query,
add,
del,
update
}
网友评论