一,创建表结构  /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'
    })
  }
})
 

16 ~ express ~ 添加博客分类的更多相关文章

  1. 搭建自己的博客(九):使用shell模式批量添加博客文章并增加分页功能

    想做个博客分页功能,但是没有太多的文章.所以使用shell命令行创建多篇文章. 1.打开pycharm下的terminal终端 python manage.py shell # 打开python终端 ...

  2. 基于SMB协议的共享文件读写 博客分类: Java

    基于SMB协议的共享文件读写 博客分类: Java   一.SMB协议 SMB协议是基于TCP-NETBIOS下的,一般端口使用为139,445. 服务器信息块(SMB)协议是一种IBM协议,用于在计 ...

  3. Node.js 从零开发 web server博客项目[express重构博客项目]

    web server博客项目 Node.js 从零开发 web server博客项目[项目介绍] Node.js 从零开发 web server博客项目[接口] Node.js 从零开发 web se ...

  4. 原生js添加博客点击鼠标出小心心效果~~

    昨天刚申请成功JS权限,心血来潮想添加点东西,记得之前看到别人家博客首页点击鼠标的时候会出现炫酷的 “小心心”,自己也来搞一个.没有用jquery啥的框架,原生js写起来麻烦了点,不过主要是怕博客首页 ...

  5. paper 16 : 计算机视觉领域博客资源

    这是收录的图像视觉领域的博客资源的第一部分,包含:中国内地.香港.台湾 这些名人大家一般都熟悉,本文仅收录了包含较多资料的个人博客,并且有不少更新,还有些名人由于分享的paper.code或者数据集不 ...

  6. Node.js+Express搭建博客系统基本环境安装

    1.下载安装node.js 官网下载地址:https://nodejs.org/en/download/ 2.安装express. 打开node命令行工具,在命令行中输入:npm install -g ...

  7. ajaxFileUpload 报这错jQuery.handleError is not a function 博客分类: WEB前端jquery

    ajaxfileuploadhandleError  今天刚打个一个技术群,里面有人问标题上的问题,嘿,我恰好遇过,现在大家至少也在用jquery1.9以上的版本,ajaxfileupload的版本早 ...

  8. 在Eclipse中使用Maven插件 博客分类: Java相关技术

    简介 本文介绍如何在Eclipse中通过maven插件编写java项目和web项目. 安装Maven 下载Maven最新版本,见:maven.apache.org/download.html 当前版本 ...

  9. eclipse中 将java项目转换为web项目 博客分类: Tomcat

      1.找到项目工作空间目录,打开.project文件,并修改文件, 修改如下:      找到:<natures> </natures>代码段,在代码段中加入如下内容并保存: ...

随机推荐

  1. 在linux环境中如何删除文件

    使用rm -rf 目录名字 命令即可 -r 就是向下递归,不管有多少级目录,一并删除-f 就是直接强行删除,不作任何提示的意思 eg 删除文件夹实例:rm -rf /var/log/httpd/acc ...

  2. vue的高级使用技巧

    全局组件注册 一般组件应用弊端,比较笨拙繁琐低效,比如我们写了一些组件,需要引用上的时候就通过import导入,那如果是高频繁需要使用的组件,则需要在每个使用的时候都需要引入并注册 假设现在有两个组件

  3. 「NOIP2007」树网的核

    传送门 Luogu 解题思路 这里着重介绍 \(O(n^3)\) 的做法,毕竟考场上只有 \(N\le300\) \(Q \omega Q\) 首先我们要知道,对任意一条直径算偏心距都是一样的. 证明 ...

  4. (转)spring mvc 中文乱码问题解决

    在eclipse环境里,页面传输数据的时候通常用ISO-8859-1这个字符集可以用 str = new String(str.getBytes("ISO-8859-1"), &q ...

  5. LR、SVM、RF、GBDT、XGBoost和LightGbm比较

    正则化 L1范数 蓝色的是范数的解空间,红色的是损失函数的解空间.L2范数和损失函数的交点处一般在坐标轴上,会使\(\beta=0\),当然并不一定保证交于坐标轴,但是通过实验发现大部分可以得到稀疏解 ...

  6. package报错

    java类的第一行package 包路径 package报错 jdk版本不一致 或者jar包冲突

  7. WARN No appenders could be found for logger 。。。。

    对于类似与标题的警告信息,一般来说是环境在没有加载log4j的配置文件之前就读取了log4j的包. 解决方法就是先加载log4j的配置文件,然后再加载log4j的包. 另一个解决方案就是移除log4j ...

  8. Day6 - E - Brownie Points II POJ - 2464

    Stan and Ollie play the game of Odd Brownie Points. Some brownie points are located in the plane, at ...

  9. SpringBoot配置介绍

    SpringBoot配置介绍 SpringBoot如何进行配置 在SpringBoot中默认使用Servlet3.0可以没有web.xml,没有任何的xml,我们想要做一些自定义配置,比u数据库相关信 ...

  10. 使用Hibarnate: 出现 java.sql.SQLException: ORA-00911: 无效字符, 解决思路

    1. 查看到: Hibernat自动生成的sql查询语句 Hibernate: select * from ( select module0_.MODULE_ID as MODULE_ID1_1_, ...