1975react社区问答管理系统开发mysql数据库web结构node.js编程计算机网页源码

一、源码特点
  react 社区问答管理系统是一套完善的完整信息管理类型系统,结合react.js框架和node.js后端完成本系统,对理解react node编程开发语言有帮助系统采用node框架(前后端分离)),系统具有完整的源代码和数据库,系统主要采用B/S模式开发。
前段主要技术 react
后端主要技术 node.js
数据库 mysql
开发工具 vscode
环境需要

    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "react-router-dom": "^6.16.0",
    "react-scripts": "5.0.1",
    "web-vitals": "^2.1.4"
vue 版本 2.9.6
node 版本 16.14.2

使用说明

后端服务
nodemon clean exit   这个是 node.js 启动命令
客户端
npm run start 启动命令

二、功能介绍

(1)分类管理:对分类信息进行添加、删除、修改和查看
(2)标签管理:对标签信息进行添加、删除、修改和查看
(3)用户管理:对用户信息进行添加、删除、修改和查看
(4)问答管理:对问答信息进行添加、删除、修改和查看,同时进行其他业务操作,也可以进行深度检索
(5)评论管理:对评论信息进行添加、删除和查看
(6)关注管理:对关注信息进行添加、删除、和查看
(7)点赞管理:对点赞信息进行添加、删除和查看
(8)举报管理:对举报信息进行添加、删除、修改和查看
(9)通知管理:对通知信息进行添加、删除、修改和查看
(10)私信管理:对私信信息进行添加、删除、修改和查看
(11)用户登录、退出、个人信息修改、用户注册

数据库设计

CREATE TABLE `fenlei` (
`flid` int(11) NOT NULL auto_increment,
`fl` VARCHAR(40) default NULL COMMENT '分类',  PRIMARY KEY  (`flid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `biaoqian` (
`bqid` int(11) NOT NULL auto_increment,
`bq` VARCHAR(40) default NULL COMMENT '标签',  PRIMARY KEY  (`bqid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `yonghu` (
`yhid` int(11) NOT NULL auto_increment,
`yhm` VARCHAR(40) default NULL COMMENT '用户名',
`mm` VARCHAR(40) default NULL COMMENT '密码',
`xm` VARCHAR(40) default NULL COMMENT '姓名',
`qx` VARCHAR(40) default NULL COMMENT '权限',
`lxdh` VARCHAR(40) default NULL COMMENT '联系电话',
`lxdz` VARCHAR(40) default NULL COMMENT '联系地址',  PRIMARY KEY  (`yhid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `wenda` (
`wdid` int(11) NOT NULL auto_increment,
`wdh` VARCHAR(40) default NULL COMMENT '问答号',
`bt` VARCHAR(40) default NULL COMMENT '标题',
`nr` VARCHAR(40) default NULL COMMENT '内容',
`fbsj` VARCHAR(40) default NULL COMMENT '发布时间',
`yh` VARCHAR(40) default NULL COMMENT '用户',
`zt` VARCHAR(40) default NULL COMMENT '状态',
`dzl` VARCHAR(40) default NULL COMMENT '点赞量',  PRIMARY KEY  (`wdid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `pinglun` (
`plid` int(11) NOT NULL auto_increment,
`wd` VARCHAR(40) default NULL COMMENT '问答',
`pl` VARCHAR(40) default NULL COMMENT '评论',
`yh` VARCHAR(40) default NULL COMMENT '用户',
`plsj` VARCHAR(40) default NULL COMMENT '评论时间',  PRIMARY KEY  (`plid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `guanzhu` (
`gzid` int(11) NOT NULL auto_increment,
`zz` VARCHAR(40) default NULL COMMENT '作者',
`yh` VARCHAR(40) default NULL COMMENT '用户',
`gzsj` VARCHAR(40) default NULL COMMENT '关注时间',  PRIMARY KEY  (`gzid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

react.js设计

import React, { useState } from 'react';
import axios from 'axios';
import { useNavigate } from 'react-router-dom';
//举报添加页面
function Addjubao() {
    const [formData, setFormData] = useState({
        bt: '',
        jbnr: '',
        wd: '',
        jbsj: '',
        yh: '',
        zt: '',
      });

  // 定义 handleChange 函数
  const handleChange = (e) => {
    setFormData((prevState) => ({
      ...prevState,
      [e.target.name]: e.target.value,
    }));
  };    
     
      const handleReset = () => {
        setFormData({   bt: '',   jbnr: '',   wd: '',   jbsj: '',   yh: '',   zt: '',    });
      };
    const navigate = useNavigate();

    const handleSubmit = (event) => {
        event.preventDefault();
     
        // 发送POST请求到后端保存举报数据
    
      
        axios.post('/api/jubao/save', {
            form:formData
        })
        .then(() => {
            alert("保存成功");
         //   navigate('/');  
         handleReset(); // 重置表单
        })
        .catch(error => {
            alert('添加举报时发生错误');
            console.error("添加举报时发生错误:", error);
        });
    };

    return (
        <div>
            <h2>添加举报</h2>
            <form onSubmit={handleSubmit} method='post'>


                <div className="form-group">
                    <label>标题:</label>
                    <input type="text" className="form-control" name="bt" value={formData.bt}
          onChange={handleChange} required />
                </div>
                <div className="form-group">
                    <label>举报内容:</label>
                    <input type="text" className="form-control" name="jbnr" value={formData.jbnr}
          onChange={handleChange} required />
                </div>
                <div className="form-group">
                    <label>问答:</label>
                    <input type="text" className="form-control" name="wd" value={formData.wd}
          onChange={handleChange} required />
                </div>
                <div className="form-group">
                    <label>举报时间:</label>
                    <input type="text" className="form-control" name="jbsj" value={formData.jbsj}
          onChange={handleChange} required />
                </div>
                <div className="form-group">
                    <label>用户:</label>
                    <input type="text" className="form-control" name="yh" value={formData.yh}
          onChange={handleChange} required />
                </div>
                <div className="form-group">
                    <label>状态:</label>
                    <input type="text" className="form-control" name="zt" value={formData.zt}
          onChange={handleChange} required />
                </div>

   		 <div className="form-group">
                <button type="submit" className="btn btn-primary">保存</button>  

                <button type="button" onClick={handleReset} id="reset" className="btn btn-success" >重置</button>
       		</div>
            </form>
        </div>
    );
}

export default Addjubao;

node.js设计

 
 
// 3.2 创建路由单元
//let router=express.Router();
 
 
let router=express.Router();
 
//3.3 查询关注接口 
router.get('/findAll',(req,res)=>{
	
    const zz=req.query.zz;//作者
	   // console.log("zz="+zz);
    const yh=req.query.yh;//用户
	   // console.log("yh="+yh);



    

    db.getConnection((err,connection)=>{
        if(err) throw err;
        let sql='select * from guanzhu where 1=1 ';
        if(zz){
            sql+=`and zz like '%${zz}%'`;//动态拼接sql
        }
        if(yh){
            sql+=`and yh like '%${yh}%'`;//动态拼接sql
        }

        console.log(sql);
        connection.query(sql,(err,results)=>{
            if(err) throw err;
            res.json(new Response(200,results,'查询成功'))
        });
        // 释放连接对象
        connection.release();
        
    })
});
 
 
 
 



 

// 3.3 删除关注接口 
router.get('/deleteById',(req,res)=>{
    // query是一个对象可以将id解构出来
    // let id=req.query.id等价于一下代码
    let {id}=req.query;
    db.getConnection((err,connection)=>{
        if(err) throw err; 
        // 根据id删除数据
        let sql=`delete from guanzhu where gzid=${id}`;
        connection.query(sql,(err,results)=>{
            if(err) throw err;
            res.json(new Response(200,null,'删除成功'))
        });
        connection.release()
    })
 
});
 
 
  
//3.4 导出
module.exports=router
 
 
 





 
//3.3 查询关注接口 
router.get('/findOne',(req,res)=>{
    let {id}=req.query;

    db.getConnection((err,connection)=>{
        if(err) throw err;
        let sql=`select * from guanzhu where gzid=${id}`;
        connection.query(sql,(err,results)=>{
            if(err) throw err;
            res.json(new Response(200,results[0],'查询成功'))
        });
        // 释放连接对象
        connection.release();
        
    })
});
 
 
 
 

// 3.3 关注修改接口
router.post('/update',(req,res)=>{
    // 根据数据库的数据 将id name gender 解构出来
    let {id,form}=req.body;
    // console.log("form.name  ="+form);  
   
    db.getConnection((err,connection)=>{
        if(err) throw err;
        let sql='';
        // 需要判断id判断 id存在则为修改接口  id不存在则为新增接口
     
            // 修改
            sql=`update guanzhu set zz='${form.zz}',yh='${form.yh}',gzsj='${form.gzsj}' where gzid=${id}`;
      
            // 执行sql操作
            connection.query(sql,(err,results)=>{
                if(err) throw err;
                res.json(new Response(200,null,'修改成功'))
            })
    })
})
 
 
 // 3.3 新增关注接口
router.post('/save',(req,res)=>{
    // 根据数据库的数据 将id name gender 解构出来
    let {form}=req.body;



    console.log("form="+form);

  //  console.log("form.name  ="+form.name);  
  
    db.getConnection((err,connection)=>{
        if(err) throw err;
        let sql='';
        // 需要判断id判断 id存在则为修改接口  id不存在则为新增接口
       
            sql=`insert into guanzhu(zz,yh,gzsj) values('${form.zz}','${form.yh}','${form.gzsj}')`;
            console.log("sql="+sql);
            // 执行sql操作
            connection.query(sql,(err,results)=>{
                if(err) throw err;
                res.json(new Response(200,null,'保存成功'))
            })
    })
})
 
 

router.post('/gz',(req,res)=>{
    // 根据数据库的数据 将id name gender 解构出来
    let {form}=req.body;



    console.log("form="+form);

  //  console.log("form.name  ="+form.name);  
  
    db.getConnection((err,connection)=>{
        if(err) throw err;
        let sql='';
        // 需要判断id判断 id存在则为修改接口  id不存在则为新增接口
            sql='delete from guanzhu where zz='+form.zz+' and yh='+form.yh+''  ;
            connection.query(sql,(err,results)=>{
                if(err) throw err;
               // res.json(new Response(200,null,'保存成功'))
            })
            sql=`insert into guanzhu(zz,yh,gzsj) values('${form.zz}','${form.yh}','${form.gzsj}')`;
            console.log("sql="+sql);
            // 执行sql操作
            connection.query(sql,(err,results)=>{
                if(err) throw err;
                res.json(new Response(200,null,'保存成功'))
            })
    })
})

三、注意事项
1、管理员账号:admin密码:admin 数据库配置文件\sqwd\util\pool.js
2、开发环境为vscode开发,数据库为mysql,使用react语言开发。
3、数据库文件名是reactsqwd.sql 系统名称sqwd. 地址:http://128.0.0.1:3000/login

四 系统实现

需要源码 其他的定制服务  下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/772839.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是数字体验成熟度,以及数字成熟度的模型计算和实现方法

“开发成功的全渠道数字身份&#xff0c;并通过无缝的数字体验吸引广泛的受众。无论您身在何处&#xff0c;都可以加速数字化转型并促进业务增长。通过直观、全面的工具&#xff0c;并了解您个人的数字体验成熟度水平&#xff0c;超越不断增长的客户期望并超越竞争对手。今天就…

构建LangChain应用程序的示例代码:53、利用多模态大型语言模型在RAG应用中处理混合文档的示例

许多文档包含多种内容类型&#xff0c;包括文本和图像。 然而&#xff0c;在大多数 RAG 应用中&#xff0c;图像中捕获的信息都会丢失。 随着多模态LLMs的出现&#xff0c;比如GPT-4V&#xff0c;如何在RAG中利用图像是值得考虑的。 本篇指南的亮点是&#xff1a; 使用非结…

不到 5 元的随身 WiFi 刷 Debian 系统 做轻量家庭服务器

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 前不久在某宝均价 5 元买了两个随身 WiFi,拆机看了看丝印都是 MSM8916 ,正好是红米 2 同款的骁龙 410 的芯片,可以刷个 Debian 当作家庭服务器来跑一些轻量的服务。 不过手气不是很好,两个都是 512M + 4G 的配置…

【高阶数据结构】B-数、B+树、B*树的原理

文章目录 B树的概念及其特点解析B树的基本操作插入数据插入数据模拟 分析分裂如何维护平衡性分析B树的性能 B树和B*树B树B树的分裂B树的优势 B*B*树的分裂 总结 B树的概念及其特点 B树是一颗多叉的平衡搜索树&#xff0c;广泛应用于数据库和 文件系统中&#xff0c;以保持数据…

Ubuntu20.04突然没网的一种解决办法

本来要学一下点云地图处理&#xff0c;用octomap库&#xff0c;但是提示少了octomap-server库&#xff0c;然后通过下面命令安装的时候&#xff1a; sudo apt install ros-noetic-octomap-server 提示&#xff1a;错误:7 https://mirrors.ustc.edu.cn/ubuntu focal-security …

11 - matlab m_map地学绘图工具基础函数 - 绘制航迹、椭圆、风向玫瑰图和特定的圆形区域的有关函数及其用法

11 - matlab m_map地学绘图工具基础函数 - 绘制航迹、椭圆、风向玫瑰图和特定的圆形区域的有关函数及其用法 0. 引言1. 关于m_track2. 关于m_range_ring3. 关于m_ellipse4. 关于m_windrose5. 结语 0. 引言 本篇介绍下m_map中绘制航迹图函数&#xff08;m_track&#xff09;、绘…

HTTP与HTTPS协议区别及应用场景

HTTP&#xff08;超文本传输​​协议&#xff09;和 HTTPS&#xff08;安全超文本传输​​协议&#xff09;都是用于通过网络传输数据的协议。虽然它们有一些相似之处&#xff0c;但在安全性和数据保护方面也存在显著差异。 在这篇博文中&#xff0c;我们将探讨 HTTP 和 HTTPS…

Hadoop-11-MapReduce JOIN 操作的Java实现 Driver Mapper Reducer具体实现逻辑 模拟SQL进行联表操作

章节内容 上一节我们完成了&#xff1a; MapReduce的介绍Hadoop序列化介绍Mapper编写规范Reducer编写规范Driver编写规范WordCount功能开发WordCount本地测试 背景介绍 这里是三台公网云服务器&#xff0c;每台 2C4G&#xff0c;搭建一个Hadoop的学习环境&#xff0c;供我学…

利用YOLOv8识别自定义模型

一、背景介绍 最近项目需要识别自定义物品&#xff0c;于是学习利用YOLOv8算法&#xff0c;实现物品识别。由于物体类别不再常规模型中&#xff0c;因此需要自己训练相应的模型&#xff0c;特此记录模型训练的过程。 二、训练模型的步骤 1.拍照获取训练图片&#xff08;训练图…

【前端CSS3】CSS显示模式(黑马程序员)

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、CSS元素显示模式&#xff1a;☀️☀️☀️2.1 什么是元素显示模式2.2 块元素2.3 行内元素2.4 行块元素2.5 元素显示模式的转换 三、总结&#x1f680;&#x1f680;&#x1f680; 一、前言&#x1f680;&#x1f…

操作符“->“

title: 操作符"->" date: 2024-01-16 00:00:00 categories: C箭头 tags: 箭头操作以及偏移量计算 #嘎嘎 操作符"->" ->是一个成员访问的操作&#xff0c;它的作用是通过一个指针来访问它所指向的对象的成员变量或成员函数。它的左边必须是一个指…

(vue)eslint-plugin-vue版本问题 安装axios时npm ERR! code ERESOLVE

(vue)eslint-plugin-vue版本问题 安装axios时npm ERR! code ERESOLVE 解决方法&#xff1a;在命令后面加上 -legacy-peer-deps结果&#xff1a; 解决参考&#xff1a;https://blog.csdn.net/qq_43799531/article/details/131403987

全网最适合入门的面向对象编程教程:09 类和对象的Python实现-类之间的关系,你知道多少?

全网最适合入门的面向对象编程教程&#xff1a;09 类和对象的 Python 实现-类之间的关系&#xff0c;你知道多少&#xff1f; 摘要&#xff1a; 本文主要对类之间的关系进行了基本介绍&#xff0c;包括继承、组合、依赖关系&#xff0c;并辅以现实中的例子加以讲解&#xff0…

Java的进程和线程

一Java的进程 二Java的线程 多线程 ◆如果在一个进程中同时运行了多个线程&#xff0c;用来完成不同的工作&#xff0c;则称之为“多线程”。 ◆多个线程交替占用CPU资源&#xff0c;而非真正的并行执行。 ◆多线程好处。 ◆充分利用CPU的资源。 ◆简化编程模型。 ◆良好的用…

js 递归调用 相同对象--数组递归调用

<div class="save-cl"> <a-button @click="saveCl" >保存为常用策略</a-button> </div> saveCl(){ console.log(this.form.filterList[0],--------常用策略)// 此对象为上图对象 console.log(this.allElementsHaveValue(thi…

AGI系列(7)Reflection 在 AI agent 中的应用实例

斯坦福大学教授吴恩达一直非常推崇AI Agent,之前他提出过AI Agent的四种工作模式,分别是Reflection(反思)、Tool use(工具使用)、Planning(规划)和Multi-agent collaboration(多智能体协同)。 近日,他又开源了一个翻译 AI Agent, 他认为 AI 智能体机器翻译对改进传…

阿里巴巴Arthas分析调优JVM实战及常量池详解

目录 一、阿里巴巴Arthas详解 Arthas使用场景 Arthas命令 Arthas使用 二、GC日志详解 如何分析GC日志 CMS G1 GC日志分析工具 三、JVM参数汇总查看命令 四、Class常量池与运行时常量池 字面量 符号引用 五、字符串常量池 字符串常量池的设计思想 三种字符串操作…

掌握电路交换与分组交换:计算机网络的核心技术

计算机网络是现代信息社会的基石&#xff0c;而交换技术是实现网络通信的核心。本文将详细介绍两种典型的交换方式&#xff1a;电路交换和分组交换&#xff0c;帮助基础小白快速掌握这两种技术的基本概念和区别。 什么是电路交换&#xff1f; 电路交换&#xff08;Circuit Swi…

技术革新引领钢材质量智能化检测新纪元,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建钢材工业生产场景下钢材缺陷智能检测识别系统

随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;其应用领域不断拓宽&#xff0c;正深刻改变着传统产业的运作模式。在钢材生产这一基础工业领域&#xff0c;AI的引入正为钢材的质量检测带来革命性的变革。 在传统的钢材生产流程中&#xff0c;质量检测是确…