在后端开发中,应交互要求,经常会用到一些改变状态的方法,如收藏与取消收藏、点赞与取消点赞、上架与下架等等,今天给大家分享一个用Koa结合MongoDB封装的改变状态的方法,实现如下:
1.安装处理json数据格式的中间件
npm install koa-jsonp --save
2.引入处理json数据格式的中间件
const jsonp = require('koa-jsonp');
3.配置koa-jsonp中间件
app.use(jsonp());
4.封装改变状态的路由
router.get('/changeStatus', async (ctx) => {
// 获取前台传过来数据(集合名、属性、id)
let collectionName = ctx.query.collectionName;
let attr = ctx.query.attr;
let id = ctx.query.id;
// 查询数据库
let data = await DB.find(collectionName ,{
"_id":DB.getObjectId(id)
});
if(data.length>0){
// 如果状态status为1
if(data[0][attr]==1){
// 改为0
var json={
[attr]:'0'
};
// 如果状态status为0
}else{
// 改为1
var json={
[attr]:'1'
}
};
// 更新数据库
let updateResult = await DB.update(collectionName,{
"_id":DB.getObjectId(id)
},json);
// 必须安装koa-jsonp,并use,才能返回json格式的数据
if(updateResult){
ctx.body={"message":'更新成功',"success":true}
}else{
ctx.body={"message":'更新失败',"success":false}
};
}else{
ctx.body={"message":'更新失败,参数错误',"success":false}
}
});
5.封装页面点击事件
// 点击切换状态
function toggle(el, collectionName, attr, id) {
$.get('/admin/changeStatus',{
// 集合名称
collectionName:collectionName,
// 属性
attr:attr,
// ID
id:id
},function(data){
if(data.success){
if(el.src.indexOf('yes')!=-1){
el.src='/admin/images/no.gif'
}else{
el.src='/admin/images/yes.gif'
}
}
})
}