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回调时出现的错误

http://www.dongcoder.com/detail-1091197.html

Last updated