Node-意见反馈模块

举报
林太白 发表于 2025/01/17 09:57:23 2025/01/17
【摘要】 Node-意见反馈模块

意见反馈模块

接下来我们尝试写一个意见反馈模块,用户可以提交反馈,管理员可以查看和管理反馈。

1、创建数据库表

  • 主要字段有:
    • 反馈内容:feedcontent
    • 反馈时间:createtime
    • 反馈人:name
    • 反馈人手机号:phone
    • 反馈人用户名:username
    • 反馈人id:userId
CREATE TABLE feedbacks (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    createtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    feedcontent TEXT,
    phone VARCHAR(20),
    username VARCHAR(100),
    userId INT NOT NULL
);

2、引入接口路由

创建表以后,接下来就可以去新建对应文件和引入了

☞ app.js

// 用户反馈部分
const feedbackRoutes = require('./server/api/feedbackRoutes'); 
// 反馈接口
app.use('/api/feedback', feedbackRoutes);

3、新增接口

创建表和路由以后,接下来就可以去开发我们的接口了

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

之前我们封装好的公共方法直接引入

// 提交反馈的接口
app.post('/feedback', (req, res) => {
  const { name, phone, feedcontent, username, userId } = req.body;

  // 检查是否缺少必要字段
  if (!name || !phone || !feedcontent || !username || !userId) {
    return res.status(400).json({ message: 'Please provide all required fields' });
  }

  // 插入数据到 MySQL 数据库
  const query = 'INSERT INTO feedbacks (name, phone, feedcontent, username, userId) VALUES (?, ?, ?, ?, ?)';
  pool.query(query, [name, phone, feedcontent, username, userId], (err, result) => {
    if (err) {
      console.error(err);
      return res.status(500).json({ message: 'Database error' });
    }

    res.status(200).json({ message: 'Feedback submitted successfully', id: result.insertId });
  });
});
  • 完善优化
const express = require('express');
const router = express.Router();
const connectionPool = require('../db'); // 引入数据库连接池模块
const { addCondition, addDateRangeCondition, addPagination } = require('./apimethods.js'); // 引入封装方法

// 新增 POST
router.post('/', (req, res) => {
    const insertSql = 'INSERT INTO feedbacks SET ?'; // 准备 SQL 插入语句
    const { name, phone, username, describe, email, userId } = req.body;

    // 检查是否缺少必要字段
    if (!describe || !userId) {
        res.send({
            code: 400,
            data: results,
            message: '请填写必填信息!'
        });
        return
    }
    const postData = { name, phone, username, describe, email, userId };
    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: '添加成功!'
            });
        }
    });
});
  • 测试一下添加,已经成功了!
{code: 200,}
code: 200
data: {fieldCount: 0, affectedRows: 1, insertId: 1, serverStatus: 2, warningCount: 0, message: "",}
message: "添加成功!"

4、查询接口

接下来我们写一个查询接口,用于查询所有反馈信息,并且进行对应的分页

// 分页查询
router.get('/', (req, res) => {
    const { describe, name,phone,feedinformation,userId, pageNum, pageSize } = req.query;
    let query = `SELECT * FROM feedbacks`;
    // 构建查询条件
    const params = [];
    query = addCondition(query, params, 'userId', userId); 
    query = addCondition(query, params, 'describe', describe);
    query = addCondition(query, params, 'name', name);
    query = addCondition(query, params, 'phone', phone);
    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 feedbacks;`
            // 查询数据库并返回数据
            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: results,
                        message: '查询成功!',
                    });
                }
            });
        }
    });
});
  • 测试一下我们的查询接口
{
    "total": 2,
    "code": 200,
    "data": [
        {
            "id": 1,
            "name": null,
            XXX
        },
        {
            "id": 2,
            "name": null,
            XXXX
        }
    ],
    "message": "查询成功!"
}

ok,没问题,我们添加的查询参数也非常ok

5、修改提交接口

接下来我们写一个修改提交接口,用于修改反馈信息,目的是为了让管理员提交反馈的信息

修改我们主要是为了核查是否添加了反馈的信息

// 更新接口 
router.put('/', (req, res) => {
    const { name, phone, username, describe, userId, email,feedinformation, id } = req.body;

    // 确保 id 是有效的数字
    if (isNaN(id)) {
        return res.status(400).send({
            code: 400,
            message: '无效的 ID!'
        });
    }

    // 构建更新的字段(不包括 id)
    const updateValues = { name, phone, username, describe, userId, email,feedinformation };

    // 确保至少传递了要更新的字段
    if (!name || !phone ||!feedinformation ) {
        return res.status(400).send({
            code: 400,
            message: '缺少反馈信息!'
        });
    }

    // 执行数据库更新
    connectionPool.query('UPDATE feedbacks SET ? WHERE id = ?', [updateValues, id], (error, results, fields) => {
        if (error) {
            console.error('Database error:', error);
            return res.status(500).send({
                code: 500,
                message: '修改失败!',
                error: error.message || error
            });
        }

        // 如果没有记录被更新
        if (results.affectedRows === 0) {
            return res.status(404).send({
                code: 404,
                message: '没有找到对应的记录!'
            });
        }

        // 成功
        res.send({
            code: 200,
            message: '修改成功!',
            affectedRows: results.affectedRows
        });
    });
});

测试一下,ok,修改反馈信息完成

到这里我们的反馈信息模块就简单的完成了

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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