①admin>base.js 键入:
async delete() {
// 1.获取要删除的数据库表 model
// 2.获取要删除数据的id _id
// 3.执行删除
// 4.返回到以前页面
let model = this.ctx.request.query.model;
console.log(model);
let id = this.ctx.request.query.id;
await this.ctx.model[model].deleteOne({ _id: id });
console.log(this.ctx.request.headers["referer"]);
this.ctx.redirect(this.ctx.request.headers["referer"]);
}
②定义路由规则:
router.get("/admin/delete", controller.admin.base.delete);
③删除操作:传入操作表名和要删除的id,就可以实现根据Id删除数据的公共方法。
<td class="text-center">
<a href="/admin/role/edit?id=<%=list[i]._id%>">修改</a>
<a href="/admin/delete?model=Role&id=<%=list[i]._id%>">删除</a>
</td>
④将下面这段代码封装全局变量:
this.ctx.request.headers["referer"]
⑤在中间件中定义全局变量 prevPage
var url = require("url");
module.exports = (options, app) => {
return async function adminauth(ctx, next) {
/*
1、用户没有登录跳转到登录页面
2、只有登录以后才可以访问后台管理系统
*/
ctx.state.csrf = ctx.csrf; //全局变量
ctx.state.prevPage = ctx.request.headers["referer"];
// /admin/verify?mt=0.7466881301614958 转换成 /admin/verify
var pathname = url.parse(ctx.request.url).pathname;
if (ctx.session.userinfo) {
ctx.state.userinfo = ctx.session.userinfo; //全局变量
// console.log(ctx.state.userinfo);
await next();
} else {
//排除不需要做权限判断的页面 /admin/verify?mt=0.7466881301614958
if (
pathname == "/admin/login" ||
pathname == "/admin/doLogin" ||
pathname == "/admin/verify"
) {
await next();
} else {
ctx.redirect("/admin/login");
}
}
};
};
⑥将delete方法改造为如下,也可以实现删除方法。
async delete() {
// 1.获取要删除的数据库表 model
// 2.获取要删除数据的id _id
// 3.执行删除
// 4.返回到以前页面
let model = this.ctx.request.query.model;
console.log(model);
let id = this.ctx.request.query.id;
await this.ctx.model[model].deleteOne({ _id: id });
console.log(this.ctx.request.headers["referer"]);
this.ctx.redirect(this.ctx.state.prevPage);
}
来源:oschina
链接:https://my.oschina.net/u/4446873/blog/4289429