1、安装 mysql 模块
npm install mysql --save
2、使用
2-1 创建数据库回话
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost', //数据库地址
user: 'root', //数据库用户
password: '123456', //数据库密码
database: 'my-database', //选中数据库
})
// 执行 sql 脚本对数据库进行读写
connection.query('SELECT * FROM my_table', (err, results, fields) => {
if(err){
throw err
}
// 结束会话
connection.release()
})
注意:一个事件就有一个从开始到结束的过程,数据库会话操作执行完后,就需要关闭掉,以免占用连接资源.
2-2 创建数据连接池
一般情况下操作数据库是很复杂的读写过程,不只是一个会话,如果直接用会话操作,就需要每次会话都要配置连接参数。所以这时候就需要连接池管理会话.
const mysql = require('mysql');
// 创建数据池
const pool = mysql.createPool({
host: 'localhost', //数据库地址
user: 'root', //数据库用户
password: '123456', //数据库密码
database: 'my-database', //选中数据库
});
// 在数据池中进行会话操作
pool.getConnection(function(err, connection){
connection.query('SELECT * FROM my_table', (error, results, fields) => {
if(error){
throw error
}
connection.release();
})
})
使用Promise连接
const mysql = require('mysql');
// 创建数据池
const pool = mysql.createPool({
host: 'localhost', //数据库地址
user: 'root', //数据库用户
password: '123456', //数据库密码
database: 'my-database', //选中数据库
});
/**
* @param {*} sql 对应的数据库操作
* @param {*} value 对应的字段(数组)
*/
let query = function(sql,value){
return new Promise((resolve,reject) => {
pool.getConnection(function(err, connection){
if(err){
reject(err);
}else{
connection.query(sql, value, (error, rows) => {
if(error){
reject(err);
}else{
resolve(rows);
}
connection.release();
})
}
})
})
}
// 例:
let updatePost = function(values){
let _sql = `update posts set title=?,content=? where id=?`
return query(_sql,values)
}
router.post('/posts/:postId/edit', async(ctx, next) => {
let title = ctx.request.body.title,
content = ctx.request.body.content,
id = ctx.session.id;
await updatePost([title, content, id])
.then(() => {
ctx.body = true
}).catch(() => {
ctx.body = false
})
})