新闻分类
每一条新闻信息都是要属于某一个分类的。所以在添加新闻之前,我们应该先完成新闻分类模块
1.先设计新闻分类表
2.代码完成curd操作
一、新建路由-跳转地址
路由目录news.js
const express = require('express');
const router = express.Router(); // 路由器
/*1.新闻分类的添加*/
router.get('/category/add', (req, res) => {
res.render('category-add', {
title: '新闻的分类添加',info:{
});
});
/*2.新闻分类的展示*/
router.get('/category/list', (req, res) => {
res.render('category-list', {
title: '新闻的分类展示'});
});
module.exports = router;
app.js添加
const newsRouter = require('./routes/news.js');
app.use('/admin/news', newsRouter);
启动查看页面
http://localhost:3000/admin/news/category/add
二、分类的添加
页面分类提交form
<form class="layui-form" action="/admin/news/category/store" method="post" enctype="application/x-www-form-urlencoded">
路由里news.js添加接收表单的配置,因为要收集数据,然后定义表的模型,入库,所以在目录models添加category.js进行配置
category.js
const mongoose = require('../db/mongodb.js');
const Schema = mongoose.Schema({
cateName: {
type: String,
required: [true, '分类名称不能为空'], // 定义验证规则,这个字段不能为空,必填的
minlength: [2, '分类名称的最小长度为10个字符'], // 最小长度
maxlength: [30, '分类名称的最大长度为30个字符'], // 最大长度
},
});
/*mongoose.model 可以接受第三个参数,如果传递了第三个参数,代表实际的表名,不以第一个为准。*/
const Model = mongoose.model('Category', Schema, 'category');
Model.fields = {
cateName: '分类名称',
};
module.exports = Model;
new.js
const express = require('express');
const router = express.Router(); // 路由器
const categoryModel = require('../models/category.js');
/*1.新闻分类的添加*/
router.get('/category/add', (req, res) => {
res.render('category-add', {
title: '新闻的分类添加',info:{
}});
});
router.post('/category/store', async (req, res) => {
// 收集数据,然后定义表的模型,入库
let {
cateName} = req.body;
let cateObj = new categoryModel({
cateName});
let error = cateObj.validateSync();
if (error) {
const errorRs = [];
for (let attr in error.errors) {
errorRs.push(`${
categoryModel.fields[attr]} 字段:${
error.errors[attr]}`);
}
let url = '/admin/news/category/add';
let time = 3;
res.render('error', {
errorRs, url, time});
return;
}
// 信息合法
try {
let info = await cateObj.save();
res.redirect('/admin/news/category/list');
} catch (e) {
res.redirect('/admin/news/category/add');
}
});
/*2.新闻分类的展示*/
router.get('/category/list', async(req, res) => {
/*获取所有的分类信息*/
const infos = await categoryModel.find();
console.log(infos);
res.render('category-list', {