上一篇说到了内容添加与分类添加, 已经让后台初具模型. 接下来就是完善所有的操作. 内容修改与内容删除是不可缺少的. 先观察页面的在展示所有内容的时候最后一个 td 标签内使用 2 个标签来. 每一个 a 标签都是设置好对应的地址并且在输入地址的同时将所要更改的内容的 id 传给后台, 在删除是也是一样, 将对用的 id 值传给后台, 这样就在后台进行删除, 修改操作了.
在后台中获取前台通过 get 方式在地址栏的 id 值, 后台通过 let id= req.query.id; 将值转为 JS 文件的变量, 这样就能随时随地的使用了. 在删除时, 点击删除会跳出一个 delete 页面, 在跳转页面时通过 Content.findById(id).populate(['category','author']).then((result)=>{}) 将数据库中读到的数据库传送给该页面并将 userInfo:req.userInfo, 值传给页面, 在有管理员权限的我时候才能进行删除操作, 把删除页面的删除标题默认为本次从数据空中的得到的和标题.
接下来就可以进入删除的步骤了, 点击删除通过 post 方式获取删除的标题, 对删除标题进行验证, 如果传过来标题为空或者传过来的标题为错误标题, 都是不能进行删除的. 标题为空的判断可以直接进行 if 判断 if(!title){} 如果能执行成功就说明传过来标题为空不能进行删除. 使用 res.render() 渲染一个提示页面, 可以让用户知道本次删除失败需要重新进行删除. 错误标题就比为空操作还要多一个从数据库种查询. Content.findOne({title}).then() 从数据库种查询有无该标题, 如果 if(!results) {} 执行就证明数据空中没有同标题的内容, 不能进行删除. Return 结束操作. 对与上面的 2 种判断都没有问题的就可以进行删除步骤了, 使用数据库 Content.deleteOne({title}).then(()=>{} 删除给内容, 在回调函数中 render 一个成功页面在成功页面传过去一个地址用于回到内容首页.
内容修改需要的验证操作更复杂, 页面点击通过 get 方式在地址栏的 id 值, 后台通过 let id = req.query.id; 将值传给后台. 在后台中通过回去的 id 值, 读取数据库 Content.findById(id).populate('category').then((result)=>{}. 将在数据库查询的值 render 给内容展示页面. 在页面都是可以改变的 input 框. 在页面设置一个提交按钮, 改变数据完成后就可以通过 post 方式将所有改变完成后的所有值传给后台处理.
接收传过来的值需要对传过来的数据进行验证, 文章标题不能为空如果为空就渲染错误页面提示用户文章标题不能为空, 文章描述不能为空如果为空就渲染错误页面提示用户文章描述不能为空, 文章内容不能为空如果为空就渲染错误页面提示用户文章内容不能为空. 最后还需要对标题查重如果从数据库中查询到该标题已经被使用, 那此次修改依旧是不成功的. 渲染错误页面提示用户该标题已存在不能进行修改并设置对应的后退按钮, 回到修改内容时的页面.
来源: http://www.jianshu.com/p/c825809c0d52