16 ~ express ~ 添加博客分类

一,创建表结构  /schemas/categories.js

var mongoose = require('mongoose')
 
module.exports = new mongoose.Schema({
  category_name : String,
})
 

二,创建模型 /models/Categories.js

var mongoose = require('mongoose')
var categoriesSchema = require('../schemas/categories')
 
module.exports= mongoose.model('Categories',categoriesSchema)

三,前台 ( 使用模板语法 ): 

(一),  博客分类首页  : /views/category.html

{% extends 'layout.html' %}
{% block main %}
<ol class="breadcrumb">
  <li><a href="/admin">管理首页</a></li>
  <li><span>分类列表</span></li>
</ol>

<h3>分类列表</h3>

<table class="table table-bordered">
  <tr>
    <th>分类名称</th>
  </tr>
    <!-- 循环输出数组 . id是对象,需要转换成字符串 -->
 
  {% for category in categories %}
  <tr>
    <td> {{category.category_name}}</td>

    {% endfor %}
  </tr>
</table>
{% endblock %}

(二),  添加博客分类页面 : views/category_add.html

{% extends 'layout.html' %}
{% block main %}
<ol class="breadcrumb">
  <li><a href="/admin">管理首页</a></li>
  <li><span>添加分类</span></li>
</ol>

<h3>添加分类</h3>
<form method="POST">
  <div class="form-group">
  <label for="category_name">分类名称</label>
    <input type="text" class="form-control" name="category_name" id="category_name" placeholder="Category Name">
  </div>

  <button type="submit" class="btn btn-default">Submit</button>
</form>

{% endblock %}

四,后台引入模型  /router/admin.js

  var Category = require('../models/Category')
**
* 分类管理
*/
router.get('/category',(req,res)=>{ // 是/,而不是 ./
  
  Category.find().then((categories)=>{
    res.render('admin/category',{
      userInfo: req.userInfo,
      categories:categories
    })
  })
})

/**
* 添加分类
*/
router.get('/category/add',(req,res)=>{
  res.render('admin/category_add',{
    userInfo:req.userInfo
  })
})

/**
* 分类的保存 , 验证接收表单提交的信息
*/
router.post('/category/add',(req,res)=>{
  // console.log(req.body)
 
  // 当用户提交错误的信息,则返回错误的页面 (因为前台没有设置AJAX) => 渲染一个错误的页面(通用错误页面 : admin/error)
  var category_name = req.body.category_name || ''
  if(category_name == ''){
    res.render('admin/error',{
      userInfo:req.userInfo,
      message:' 分类名称不能为空 ',
      url:'/admin/category/add'
  })
    return // 中断
}

// 查询数据库中是否存在刚刚上传的分类名称,有则返回分类名称已存在的信息,没有则存储上传的分类名称
Category.findOne({
  category_name:category_name
}).then((fs)=>{
  /**
  * 【bug】此处不能填 category_name 。
  * 参数不能为查询的对象(为空),应是查询后返回的结果
  * then 方法返回的是一个 Promise 对象
  * 异步操作的最终状态(" 完成或失败 "),以及该异步操作的结果值。
  * */
  if(fs){
    res.render('admin/error',{
      userInfo:req.userInfo,
      message:' 分类名称已存在 ',
      url:'/admin/category/add'
  })
    return Promise.reject() // 返回一个带有拒绝原因reason参数的Promise对象。 表示状态失败
  }else{
    // 保存
    return new Category({
      category_name:category_name
    }).save()
  }
 
}).then((newCategory)=>{
  if(newCategory){
    res.render('admin/success',{
      userInfo:req.userInfo,
      message:' 添加分类成功 ',
      url:'/admin/category'
    })
  }
})

 

猜你喜欢

转载自www.cnblogs.com/500m/p/11031671.html