Node-通知公告模块

举报
林太白 发表于 2025/01/17 09:54:36 2025/01/17
【摘要】 Node-通知公告模块

❤通知公告模块

1、新建表

通告模块是我们的标准模块,其他模块都会参考公告模块部分

☞ 这里注意将Node之中的蛇形命名法转为=>驼峰命名法

☞ 搭建一个sql表格来存储公共信息

DROP TABLE IF EXISTS `sys_notice`;
CREATE TABLE `sys_notice` (
  `notice_id` int(0) NOT NULL AUTO_INCREMENT COMMENT '公告ID',
  `notice_title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '公告标题',
  `notice_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '公告类型(1通知 2公告)',
  `notice_content` longblob NULL COMMENT '公告内容',
  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '0' COMMENT '公告状态(0正常 1关闭)',
  `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '创建者',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '更新者',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`notice_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '通知公告表' ROW_FORMAT = Dynamic;

2、搭建引入文件

☞  新建 server => api => noticeRoutes.js

console.log('noticeRoutes.js--公告模块');

☞  app.js之中引入

//引入通知公告路由
const noticeRoutes = require('./server/api/noticeRoutes');


// 公告中心路由
app.use('/api/notice', noticeRoutes);

3、新增接口



const express = require('express');
const router = express.Router();
const connectionPool = require('../db'); // 引入数据库连接池模块
const { addCondition, addDateRangeCondition, addPagination, convertKeysToSnakeCase } = require('../methods.js'); // 引入封装方法


// 新增 POST
router.post('/', (req, res) => {
    const insertSql = 'INSERT INTO sys_notice SET ?'; // 准备 SQL 插入语句
    const {
        noticeTitle,
        noticeType,
        noticeContent,
        status,
        createBy,
        createTime,
        updateBy,
        updateTime,
        remark
    } = req.body;


    // 检查是否缺少必要字段
    if (!noticeTitle || !noticeContent) {
        res.send({
            code: 400,
            data: results,
            message: '请填写必填信息!'
        });
        return
    }


    const postData = convertKeysToSnakeCase({
        noticeTitle,
        noticeType,
        noticeContent,
        status,
        createBy,
        createTime,
        updateBy,
        updateTime,
        remark
    });


    console.log(postData,'postData');
    connectionPool.query(insertSql, postData, (error, results, fields) => {
        console.log(results, 'results');
        if (error) {
            res.send({
                code: 500,
                data: results,
                message: '添加失败!'
            });
            return;
        } else {
            res.send({
                code: 200,
                data: results,
                message: '添加成功!'
            });
        }
    });
});

测试一下 欧克

4、查询接口

// 分页查询
router.get('/', (req, res) => {


    // notice_title, notice_type, notice_content, status, create_by, create_time, update_by, update_time, remark


    const { notice_title, notice_type, notice_content,pageNum, pageSize } = convertKeysToSnakeCase(req.query);
    let query = `SELECT * FROM sys_notice`;
    // 构建查询条件
    const params = [];
    query = addCondition(query, params, 'notice_title', notice_title);
    query = addCondition(query, params, 'notice_type', notice_type);
    query = addPagination(query, params, pageNum, pageSize); //分页条件
    // console.log('查询条件', query, params);
    // 查询数据库并返回数据
    connectionPool.query(query, params, (error, results) => {
        if (error) {
            res.send({
                code: 500,
                data: results,
                message: '查询失败!'
            });
            return;
        } else {
            let sqltotal = `SELECT COUNT(*) AS total FROM sys_notice;`
            // 查询数据库并返回数据
            connectionPool.query(sqltotal, (errtotal, rows) => {
                let total = rows[0]['total'];
                if (errtotal) {
                    res.send({
                        code: 401,
                        // data: results,
                        message: '查询失败!'
                    });
                    return;
                } else {
                    res.send({
                        total: total,
                        code: 200,
                        data:convertToCamelCase(results),
                        message: '查询成功!',
                    });
                }
            });
        }
    });
});


测试一下 欧克

5、详情接口

// 详情接口
router.get('/:id', (req, res) => {
    // console.log(req.query,'req.query');
    const { id } = convertKeysToSnakeCase(req.params);
    const values = [id];
    let query = 'SELECT * FROM sys_notice WHERE notice_id = ?';
    connectionPool.query(query, values, (err, results) => {
        if (err) {
            // console.error('Error querying database:', err);
            res.status(500).json({ error: 'Internal server error' });
            return;
        }
        res.json({
            code: 200,
            data: results ? convertToCamelCase(results[0]): {},
        });
    });
});


6、更新接口

// 详情接口
router.get('/:id', (req, res) => {
    // console.log(req.query,'req.query');
    const { id } = convertKeysToSnakeCase(req.params);
    const values = [id];
    let query = 'SELECT * FROM sys_notice WHERE notice_id = ?';
    connectionPool.query(query, values, (err, results) => {
        if (err) {
            // console.error('Error querying database:', err);
            res.status(500).json({ error: 'Internal server error' });
            return;
        }
        res.json({
            code: 200,
            data: results ? convertToCamelCase(results[0]): {},
        });
    });
});


7、删除接口

// 删除数据 DELETE请求处理程序  
router.delete('/:ids', (req, res) => {
    const { ids } = req.params;
   
    // 如果ids为空,直接返回400错误
    if (!ids) {
        return res.status(400).json({ success: false, message: '没有提供有效的公告ID' });
    }


    const idArray = ids.split(',').map(id => id.trim()).filter(id => id !== '');  // 去除空格和空字符串
    console.log(idArray, 'idArray');  // 注意:生产环境中应该避免调试输出


    // 如果idArray为空,说明没有有效的ID
    if (idArray.length === 0) {
        return res.status(400).json({ success: false, message: '没有有效的公告ID' });
    }


    const sql = "DELETE FROM sys_notice WHERE notice_id IN (?)";
    connectionPool.query(sql, [idArray], (err, results) => {
        if (err) {
            console.error('Error querying database:', err);
            return res.status(500).json({ success: false, error: 'Internal server error' });
        }


        // 如果没有影响的行数,返回失败消息
        if (results.affectedRows === 0) {
            return res.status(404).json({ success: false, message: '未找到对应的公告或删除失败' });
        }


        // 返回成功消息,包含删除的行数
        res.json({
            code:200,
            success: true,
            message: `${results.affectedRows}个数据已删除`,
        });
    });
});


测试一下,增删改查没问题,欧克!👌

8、规范通知模块

之前我们的通知类型只是简单的模拟成了两种类型的文章,现在我们来规范一下设置成枚举类型,并且设定层级,在我们的不同类型之中进行规范,我们的通知类型有:

也就是把我们的通告信息设置为枚举类型的,并且设定层级,我们的不同类型之中进行规范,我们的通知类型有:

ALTER TABLE sys_notice MODIFY
notice_type
ENUM('success', 'data', 'chatmsg', 'info', 'danger', 'warn');
我们规定:
- success:成功 绿色
- chatmsg:聊天消息 紫色
- info:信息 灰色
- danger:危险 红色
- warn:警告 橙色
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。