mysql的增删改查
基于前面模块化的思想,将增删改查封装成单独的函数,并且每个数据类型有对应的sql函数
1. 查询所有
对应sql语句的函数
exports.findAll = function (callback) {
let sql = 'SELECT * FROM websites ';
mysql_conn.query({
sql,
timeout,
}, function (err, result) {
if (err) {
return callback(err)
}
return callback(null, result)
})
}
在路由中使用对应的数据模型调用对应的函数
const test_mysql = require(path.join(__dirname, "../database/include/test_mysql.js"))
//查询所有item的接口
router.get("/test", function (req, rep, next) {
test_mysql.findAll(function (err, result) {
if (err) {
return next(err)
}
rep.status(200).send(result)
})
})
2.添加单个条目
sql语句在数据表设计好的情况下
? 表示占位符
query 函数第二个参数是一个要插入数据的数组
使用回调函数处理查询数据库的事件
const timeout = 4000 //设置数据库查询时间上限
//插入单个数据
exports.insertOne = function (insertData, callback) {
let sql = "INSERT INTO websites(ID,name,url,alexa,country) VALUES(?,?,?,?,?)"
mysql_conn.query({
sql,
timeout,
}, [insertData.id, insertData.name, insertData.url, insertData.alexa, insertData.country], function (err, result) {
if (err) {
return callback(err)
}
return callback(null, result)
})
}
3. 更新条目
sql语句
//更新单个数据
exports.update = function (UpdateData, callback) {
let sql = 'UPDATE websites SET name=?,url=?,alexa=?,country=? WHERE ID=?'
mysql_conn.query({
sql,
timeout,
}, [UpdateData.name, UpdateData.url, UpdateData.alexa, UpdateData.country, UpdateData.id], function (err, result) {
if (err) {
return callback(err)
}
return callback(null, result)
})
}
路由中需要多加几个判断
判断post请求数据是否为空,感觉这可以交给前端完成
判断更新的id是否存在,通过sql语句的返回结果可以验证
//更新接口
router.post("/test/edit", function (req, rep, next) {
if (Object.keys(req.body).length == 0) {
return next({
code: err.code,
message: "请求参数为空",
})
}
test_mysql.update(req.body, function (err, result) {
if (err) {
return next({
code: err.code,
errorMessage: err.sqlMessage,
})
}
//检查id是否存在;
if(result.affectedRows=='0'){
return(next({
code:2,
errorMessage:"Do'nt exist such items in databases!"
}))
}
//即使提交没有更新的数据也不会报错;这个交给前端验证
rep.send("ok")
})
})
4. 删除一个条目
sql语句
//删除数据
exports.delete=function(deleteID,callback){
let sql='DELETE FROM websites where ID=?';
mysql_conn.query({
sql,
timeout,
},[deleteID],function(err,result){
if(err){
return callback(err)
}
return callback(null,result)
})
}
路由方面同样需要判断是否,成功的删除,或者删除的条目根部就不存在
//删除单个数据的接口
router.get("/test/delete", function (req, rep, next) {
test_mysql.delete(req.query.id,function(err,result){
if(err){
return(next({
code: err.code,
errorMessage: err.sqlMessage,
}))
}else if(result.affectedRows == '0'){
return(next({
code:2,
errorMessage:"Do'nt exist such items in databases!"
}))
}
rep.send("删除成功!")
})
})
参考
1.在mysql回调时出现的错误
Last updated