node对MySQL的增删改查操作
近期因工作需要学习了一下使用node编写后端接口的相关知识,因需要频繁对数据库进行增删改查,所以记录一下,忘记了就来看一下
因为使用了模块化的编写思路,所以把路由和数据库单独进行了抽离,这里只记录对路由的处理函数,数据库的链接单独放在一个文件里,使用之前需要先引入:
const db = require('../db/index')
数据查询
查询所有
直接上代码
// @route POST api/profiles
// @desc 获取所有信息
exports.profilesAll = (req, res) => {
const sql = 'select * from profile'
db.query(sql, (err, results) => {
if (err) return res.status(400).json(err)
if (!results) return res.json({status: 400, message: '当前数据库无数据'})
res.json(results)
})
}
查询单条数据
// @route POST api/profiles/:id
// @desc 获取单个信息
exports.profilesId = (req, res) => {
const sql = 'select * from profile where id = ?'
db.query(sql, req.params.id, (err, results) => {
if(err) return res.status(404).json(err)
if(results.length !== 1) return res.status(400).json('查询错误,请输入正确的编号!')
res.json(results[0])
})
}
注意,这个id来自请求的参数
增加数据
// @route POST api/profiles/add
// @desc 创建信息接口
exports.profilesAdd = (req, res) => {
const profileFields = {}
if (req.body.type) profileFields.type = req.body.type
if (req.body.describe) profileFields.describe = req.body.describe
if (req.body.income) profileFields.income = req.body.income
if (req.body.expend) profileFields.expend = req.body.expend
if (req.body.cash) profileFields.cash = req.body.cash
if (req.body.remark) profileFields.remark = req.body.remark
const sql = 'insert into profile set ?'
db.query(sql, profileFields, (err, results) => {
if (err) return res.json(err)
if (results.affectedRows !== 1) return res.status(400).json('写入数据失败')
res.json(profileFields)
})
}
注意这上面几个都是post请求,都在请求的body中
修改数据
// @route POST api/profiles/edit/:id
// @desc 编辑信息接口
exports.profilesEdit = (req, res) => {
const profileFields = {}
if (req.body.type) profileFields.type = req.body.type
if (req.body.describe) profileFields.describe = req.body.describe
if (req.body.income) profileFields.income = req.body.income
if (req.body.expend) profileFields.expend = req.body.expend
if (req.body.cash) profileFields.cash = req.body.cash
if (req.body.remark) profileFields.remark = req.body.remark
const sql = 'update profile set ? where id = ?'
db.query(sql, [profileFields, req.params.id], (err, results) => {
if (err) return res.json(err)
if (results.affectedRows !== 1) return res.status(400).json('编辑失败!')
res.json(profileFields)
})
}
和增加数据比较像,不过也需要请求提供id
删除数据
// @route GET api/profiles/delete/:id
// @desc 删除信息接口
exports.profilesDelete = (req, res) => {
const sql = 'delete from profile where id = ?'
db.query(sql, req.params.id, (err, results) => {
if (err) return res.status(404).json(err)
if (results.affectedRows !== 1) return res.json('删除失败')
res.json({
status: 1,
message: '删除成功!删除的数据编号为:' + req.params.id
})
})
}
删除最简单,不过建议不这么写,因为直接删除数据库文件是不推荐的,一般使用伪删除,实际上是增加一个字段,比如is_active,值为1时显示,值为0时代表已删除,删除时就改一下is_active的值就可以了,和修改数据接口一样操作