①新建关于角色表的schema,model>role.js下新建role.js,键入以下代码:javascript
module.exports = app => { const mongoose = app.mongoose; const Schema = mongoose.Schema; var d = new Date(); const RoleSchema = new Schema({ title: { type: String }, description: { type: String }, status: { type: Number, default: 1 }, add_time: { type: Number, default: d.getTime() } }); return mongoose.model("Role", RoleSchema, "role"); };
②新建路由规则,新增角色提交表单会调用。java
router.post("/admin/role/doAdd", controller.admin.role.doAdd);
③增长角色的表单(增长隐藏域 csrf验证)数据库
<form action="/admin/role/doAdd" method="post"> <ul> <input type='hidden' name="_csrf" value="<%=csrf%>"></input> <li> 角色名称: <input type="text" name="title"/></li> 角色描述:<textarea name="description" id="" cols="60" rows="8"></textarea> <li> <br/> <button type="submit" class="btn btn-default">提交</button> </li> </ul> </form>
④role controller打印post数据:app
async doAdd() { console.log(this.ctx.request.body); }
⑤增长角色表单,点提交async
⑥执行role下的doAdd controller的方法,打印post提交的数据mongoose
async doAdd() { console.log(this.ctx.request.body); }
⑥修改成以下逻辑:向数据库中插入数据工具
async doAdd() { // console.log(this.ctx.request.body); let role = this.ctx.model.Role({ title: this.ctx.request.body.title, description: this.ctx.request.body.description }); let result = await role.save(); console.log(result); await this.success("/admin/role", "增长角色成功"); }
⑦如可视化工具可知,数据库插入了一条数据:post
⑧改造角色列表页面执行的controllerthis
async index() { let list = await this.ctx.model.Role.find({}); // console.log(list); await this.ctx.render("admin/role/index", { list }); }
⑨角色模板页面的controller改造为以下所示:spa
<table class="table table-bordered"> <thead> <tr class="th"> <th>角色名称</th> <th>描述</th> <th>增长时间</th> <th>操做</th> </tr> </thead> <tbody> <%for(var i = 0;i<list.length;i++){%> <tr> <td><%=list[i].title%></td> <td><%=list[i].description%></td> <td><%=list[i].addTime%></td> <td class="text-center">修改 删除</td> </tr> <%}%> </tbody> </table>
⑩添加角色成功后,便可读出数据作页面渲染:
十一、编辑功能 修改按钮:访问edit路由,执行controller的edit方法,传一个id到下个页面。
<td class="text-center"> <a href="/admin/role/edit?id=<%=list[i]._id%>">修改</a> </td>
十二、下个页面根据这个id去查询表单,作编辑回显。
async edit() { let id = this.ctx.query.id; console.log(id); let list = await this.ctx.model.Role.find({ _id: id }); console.log(list); await this.ctx.render("admin/role/edit", { list }); }
1三、点提交要修改表单,则配置修改路由:
router.post("/admin/role/doEdit", controller.admin.role.doEdit);
1四、doEdit执行如下逻辑:查找对应id修改数据。
async doEdit() { let { _id, title, description } = this.ctx.request.body; let result = await this.ctx.model.Role.updateOne( { _id }, { title, description } ); console.log(result); if (result) { await this.success("/admin/role", "编辑角色成功"); } else { await this.error("/admin/role", "编辑角色失败"); } }
15.
1六、删除操做的话取一个id执行删除操做就好了,明天说下封装公共删除方法。碎觉。