上节课我们讲了讲和打卡,今天我们来讲点赞。
需求
用户对信息列表中的信息进行点赞操作。
功能流程
前端传到后端信息 card_id,后端根据 card_id 和 token 解析出来的 user_id,查询 card_praise 表,如果记录存在说明已经点赞过了,返回给前端提示。否则插入 card_praise,再更新 card 表的 praise 字段的值。
代码
routes/index.js
1
2
3
4
|
//点赞
router.post('/praise', auth,async (ctx, next) => {
return indexApi.praise(ctx)
})
|
api/index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
|
const praise = async(ctx) => {
const cardId = ctx.request.body.card_id
const userId = ctx.state.userId
let id = await cardModel.getCardPraise(cardId,userId)
if(id > 0){
ctx.body = resp.fail(20001,"不要重复点赞")
return
}
await cardModel.createCardPraise(cardId,userId)
await cardModel.incrCardPraise(cardId)
ctx.body = resp.succeed()
return
}
|
model/cardmodel.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
const createCardPraise = async(cardId,userId)=>{
let sql = "insert into `card_praise` (card_id,user_id)values(?,?) "
const insertData = await mysql.exec(sql,[cardId,userId])
return insertData.insertId
}
const getCardPraise = async(cardId,userId)=>{
let sql = "select id from `card_praise` where card_id=? and user_id=?"
const res = await mysql.queryOne(sql,[cardId,userId])
return res.id
}
const incrCardPraise = async(cardId)=>{
let sql = "update `card` set praise=praise+1 where id=?"
const res = await mysql.exec(sql,[cardId])
return res.affectedRows
}
|
运行
1
2
3
4
5
|
POST http://localhost:3000/praise
{
"card_id":1
}
|
总结
点赞功能就讲完了,你掌握了吗?有问题欢迎到群里和志同道合的小伙伴一起交流。
下节课我们讲解查询首页列表,继续加油吧,Let’s go!