核心组件代码

本文档展示了如何进行跨域访问配置,包括允许的源、头部和方法。同时,详细阐述了Token的生成与验证流程,以及MD5加密方法。此外,还涵盖了邮件发送模块的实现,用于发送验证码。在数据操作方面,有留言页码数据请求、按用户名获取文章、用户留言和回复的设置,以及获取文章标签和分类的相关接口。所有这些功能都涉及到了数据库查询和响应处理。

跨域访问设置:

app.all('*', function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "http://localhost:8080");
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
  res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
  res.header("X-Powered-By",' 3.2.1')
  res.header("Access-Control-Allow-Credentials", true)
  res.header("Content-Type", "application/json;charset=utf-8");
  next();
  });

token 生成与验证设置:

function createToken(Payload) {
  return JWT.sign(Payload, secret, { expiresIn: 43200 }); //生成token
}
function verifyToken(token) {
  return new Promise((resolve, reject) => {
    JWT.verify(token, secret, (err, data) => {
      if (err) reject({ err: -999, data: "无效的token" });
      else resolve({ err: 0, token: data });
    });
  });
}

加密模块设置

const crypto = require('crypto')
 
var md5Crypto = (password) =>  {
    /**
     * 加密可选参数:加密后的位数
     * 1. md5 32位
     * 2. sha256 64位
     * 3. sha512 128位
     */
    const hash = crypto.createHash('md5')
    hash.update(password)
// hex为加密算法前后对比时, 一定要使用一致, 加密结果通常有两种表示方法:hex和base64
    const md5Password = hash.digest('hex')
 
    return md5Password
}
 
module.exports = md5Crypto

邮件发送模块设置:

async function send(mail, code) {             // 发送目标 发送的看具体内容
    const nodemailer = require('nodemailer');//导入模块
    let transporter = nodemailer.createTransport({
        host: 'smtp.qq.com',//邮件主机类型可以在lib库中选择
        port: 465,//端口
        secure: true,
        auth: {//作者
            user: '972761675@qq.com', // 发送者
            pass: 'dyhebameowrnbegi' // 发送者的邮箱smtp
        }
    });
    // 这里写邮件的详情信息
    let obj = {
        from: '"Admin" <972761675@qq.com>', // 发送者
        to: mail, // 接收者
        subject: '您有一条博客注册验证码',
        text: `您好, 您正在注册我的博客账户,验证码:${code}如不是本人操作请忽略。`, //信息描述
    }
    // 开始发送
    await transporter.sendMail(obj, (err, res) => {
        return new Promise((resolve, reject) => {
            if (!err) {
                resolve('发送成功')
            } else {
                reject('验证码发送失败..')
            }
        })
    })
}
module.exports = send;

请求留言页码数据

router.get("/pageSize", (req, res) => {
  let { page } = req.query;
  /* message要返回的数据 */
  const message = {};
  /* 每页多少数据 */
  let Pagesize = 10;
  page = (page - 1) * Pagesize;
  const sqlSelect = "SELECT COUNT(*) FROM leave_message;";
  /* 一共28条数据 一页10条数据 倒叙查询 */
  const sqlPageSelect = `SELECT * FROM  leave_message ORDER BY id DESC LIMIT ${page},${Pagesize};`;
  mysql.query(sqlSelect, (err, data) => {
    if (!err) {
      /* 获取留言条数 */
      message.count = data[0]["COUNT(*)"];
      if (message.count > 0) {
        mysql.query(sqlPageSelect, async (err, data) => {
          if (!err) {
            await data.forEach((item, i) => {
              mysql.query(
                `SELECT * FROM leaveM_reply WHERE reply_username = '${item.username}' AND reply_date = '${item.date}';`,
                (err, value) => {
                  if (!err) {
                    item.replyAccess = value;
                    if (i === data.length - 1) {
                      message.data = data;
                      return res.send({ err: 0, message: message });
                    }
                  }
                }
              );
            });
          } else {
            return res.json({ err: -998, message: err.message });
          }
        });
      } else {
        message.data = [];
        return res.send({ err: -99, message: message });
      }
    } else {
      return res.json({ err: -999, message: "网络有点问题呢,稍后再试试哦!" });
    }
  });
});

根据用户查询文章

router.get("/getnotePageByName", (req, res) => {
  let { page,username } = req.query;
  // console.log(req.query)
  /* message要返回的数据 */
  const message = {};
  /* 每页多少数据 */
  const Pagesize = 10;
  page = (page - 1) * Pagesize;
  const sqlSelect = `SELECT COUNT(*) FROM article where username='${username}';`;
  /* 一共28条数据 一页10条数据 倒叙查询 */
  const sqlPageSelect = `SELECT * FROM  article where username='${username}' ORDER BY id DESC LIMIT ${page},${Pagesize};`;
  // mysql.connect(() => console.log("connect ok!"));
  mysql.query(sqlSelect, (err, data) => {
    if (!err) {
      /* 获取文章条数 */
      message.count = data[0]["COUNT(*)"];
      // console.log(data)
      // console.log(message.count)
      mysql.query(sqlPageSelect, (err, data) => {
        if (!err) {
          // console.log(data)
          message.data = data;
          return res.send({ err: 0, message: message });
        } else {
          return res.json({ err: -998, message: err.message });
        }
      });
    } else {
      return res.json({ err: -999, message: "网络有点问题呢,稍后再试试哦!" });
    }
  });
});

用户留言设置

router.post("/leavemessage", (req, res) => {
  const { value, token } = req.body;
  jwt
    .verifyToken(token)
    .then((data) => {
      const nowDate = new Date();
      const year = nowDate.getFullYear();
      const mouth = nowDate.getMonth() + 1;
      const day = nowDate.getDate();
      const hours = format.formatVerify(nowDate.getHours());
      const minutes = format.formatVerify(nowDate.getMinutes());
      const second = format.formatVerify(nowDate.getSeconds());
      let date = `${year}-${mouth}-${day} ${hours}:${minutes}:${second}`;
      /* 声明一个查询sql语句 */
      const sqlSelect = `SELECT nickname, avatar FROM user WHERE username = '${data.token.username}';`;
      mysql.query(sqlSelect, (err, msg) => {
        if (!err) {
          /* 一个插入sql语句 */
          JSON.stringify(msg);
          const sqlINsert = `INSERT INTO leave_message(username,nickname,avatar,value,date) VALUES('${data.token.username}','${msg[0].nickname}','${msg[0].avatar}','${value}','${date}');`;
          mysql.query(sqlINsert, (err) => {
            if (!err) {
              return res.json({
                err: 0,
                message: "发表成功,管理员可以看见你的留言!",
              });
            } else {
              console.log(err.message);
              return res.json({
                err: -999,
                message: "失败了,检查一下网络设置!",
              });
            }
          });
        } else {
          console.log(err.message);
          return res.json({ err: -999, message: "失败了,检查一下网络设置!" });
        }
      });
    })
    .catch((err) => {
      return res.json({ err: -999, message: "发布失败,非法的token!" });
    });
});

留言回复设置

jwt
    .verifyToken(token)
    .then((data) => {
      mysql.query(
        `SELECT username,nickname,avatar FROM user WHERE username = '${data.token.username}';`,
        (err, value) => {
          if (!err) {
            value = value[0];
            console.log(value)
            mysql.query(
              `INSERT INTO leaveM_reply(reply_username,reply_nickname,reply_date,content,username,avatar,nickname,datetime)
                     VALUES('${replyUser}','${replyName}','${replyDate}','${replyContent}','${value.username}','${value.avatar}','${value.nickname}','${date}');`,
              (err) => {
                if (!err) {
                  return res.json({ err: 0, message: "回复成功!" });
                } else {
                  return res.json({
                    err: -998,
                    message: "回复失败了,检查检查格式在回复吧!",
                  });
                }
              }
            );
          } else {
            return res.json({ err: -996, message: "网络不太行稍后再试吧!" });
          }
        }
      );
    })
    .catch((err) => {
      return res.json({ err: -999, message: err.message });
    });

获取文章标签设置

router.post("/getlableInfo", (req, res) => {
  const { lable } = req.body;
  mysql.connect(() => console.log("ok"));
  const sql = `SELECT * FROM article WHERE lable = '${lable}';`;
  mysql.query(sql, (err, data) => {
    if (!err) {
      return res.send({ err: 0, message: data });
    } else {
      return res.json({
        err: -999,
        message: "抱歉网络有点跟不上了,等一会再试试叭!",
      });
    }
  });
});

获取文章分类设置

router.get('/getcategroys', (req, res) => {
  const sql = 'SELECT article_categroy, COUNT(article_categroy) FROM article GROUP BY article_categroy;'
  mysql.query(sql, (err, value) => {
      if(!err) {
        return res.send({err: 0, message: value});
      } else {
        return res.json({err: -999, message: '文章分类查询出错了,你可以将建议反馈给我噢!'});
      }
  });  
});

获取分类详情页设置

router.post('/getManycategroys', (req, res) => {
  const {categroy} = req.body; 
  const sql = 'SELECT * FROM article WHERE article_categroy = ?';
  const parmas = [categroy];
  mysql.query(sql, parmas, (err, value) => {
    if(!err) {
      return res.send({err: 0, message: value});
    } else {
      return res.json({err: -999, message: '查询出错了,你可以将建议反馈给我噢!'});
    }
  });
});

获取详情页数据+文章评论数据设置

router.get("/bynotetext/:id", function (req, res) {
  const path = req.params.id;
  mysql.connect(() => console.log("数据库连接成功"));
  const sqlOne = `SELECT content,article_brief,article_img,time,title,visited FROM article WHERE article_id = '${path}';`;
  const sqlTwo = `SELECT * FROM access_message WHERE article_id = '${path}';`;
  const message = {};
  mysql.query(sqlOne, (err, article_data) => {
    if (!err) {
      /* 将文章数据保存 */
      message.content = article_data;
      /* 更新后台浏览数量数据start */
      const updateAccessUser =
        "UPDATE article SET visited = ? WHERE article_id = ?";
      const parmas = [++article_data[0].visited, path];
      mysql.query(updateAccessUser, parmas); // 直接执行更新操作
      /* 更新浏览数据end */

      mysql.query(sqlTwo, async (err, access_data) => {
        if (!err) {
          /* 如果有评论我们再判断是否有回复 */
          if (access_data.length > 0) {
            await access_data.forEach((item, i) => {
              mysql.query(
                `SELECT * FROM detail_reply WHERE reply_username = '${item.username}' AND reply_date = '${item.date}' AND article_type = '${path}';`,
                (err, value) => {
                  if (!err) {
                    item.replyAccess = value;
                    if (i === access_data.length - 1) {
                      /* 将评论回复数据添加 */
                      message.data = access_data;
                      return res.send({ err: 0, message: message });
                    }
                  }
                }
              );
            });
          } else {
            message.data = [];
            return res.send({ err: 0, message: message });
          }
        } else {
          return res.json({ erroy: -1, content: "评论信息查询错误!" });
        }
      });
    } else {
      return res.json({ erroy: -1, content: "文章查询错误!" });
    }
  });
});

文章评论设置

router.post("/accessPulish", (req, res) => {
  const { token, article_id, access_content } = req.body;
  jwt
    .verifyToken(token)
    .then((data) => {
      const nowDate = new Date();
      const year = nowDate.getFullYear();
      const mouth = nowDate.getMonth() + 1;
      const day = nowDate.getDate();
      const hours = format.formatVerify(nowDate.getHours());
      const minutes = format.formatVerify(nowDate.getMinutes());
      const second = format.formatVerify(nowDate.getSeconds());
      const date = `${year}-${mouth}-${day} ${hours}:${minutes}:${second}`;
      mysql.connect(() => console.log("ok!"));
      /* 声明一个查询sql语句 */
      const sqlSelect = `SELECT nickname,avatar FROM user WHERE username = '${data.token.username}';`;
      mysql.query(sqlSelect, (err, msg) => {
        if (!err) {
          /* 一个插入sql语句 */
          JSON.stringify(msg);
          const sqlINsert = `INSERT INTO access_message(username,nickname,article_id,avatar,value,date)
             VALUES('${data.token.username}','${msg[0].nickname}','${article_id}','${msg[0].avatar}','${access_content}','${date}');`;
          /* 插入数据库 */
          mysql.query(sqlINsert, (err) => {
            if (!err) {
              res.send({ err: 0, message: "发表成功!" });
              /* 进行评论数量查询 */
              mysql.query(
                `SELECT value FROM access_message WHERE article_id='${article_id}'`,
                (err, data) => {
                  if (!err) {
                    let length = data.length;
                    mysql.query(
                      `UPDATE article SET accessPulish_count = ${length} WHERE article_id = '${article_id}'`
                    );
                  }
                }
              );
            } else {
              return res.json({
                err: -999,
                message: "失败了,检查一下网络设置叭!",
              });
            }
          });
        } else {
          return res.json({ err: -999, message: err.message });
        }
      });
    })
    .catch((err) => {
      return res.json({ err: -999, message: "发布失败,非法的token!" });
    });
});

文章评论回复设置

jwt
    .verifyToken(token)
    .then((data) => {
      mysql.query(
        `SELECT username,nickname,avatar FROM user WHERE username = '${data.token.username}';`,
        (err, value) => {
          if (!err) {
            value = value[0];
            mysql.query(
              `INSERT INTO detail_reply(reply_username,reply_nickname,reply_date,content,username,avatar,nickname,article_type,datetime)
                     VALUES('${replyUser}','${replyName}','${replyDate}','${replyContent}','${value.username}','${value.avatar}','${value.nickname}','${replyType}','${date}');`,
              (err) => {
                if (!err) {
                  return res.json({ err: 0, message: "回复成功!" });
                } else {
                  return res.json({
                    err: -998,
                    message: "回复失败了,检查检查格式在回复吧!",
                  });
                }
              }
            );
          } else {
            return res.json({ err: -999, message: "网络不太行稍后再试吧!" });
          }
        }
      );
    })
    .catch((err) => {
      return res.send({ err: -999, message: "无效的token!" });
    });

文章发表设置

const sql =
    "INSERT INTO article(article_brief, username, article_img, lable, content, title, time, article_id, article_categroy) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?);";
const params = [brief, username, src, lable, content, title, date, articlePath, categroy];
mysql.query(sql, params, (err) => {
if (!err) {
  return res.json({ err: 0, message: "发表成功" });
} else {
  return res.json({
    err: -999,
    message: "出错了,请检查网络设备是否正常!",
  });
}
});

修改文章设置

const sql =
    "UPDATE article SET article_brief = ?, article_img = ?, content = ?, lable = ?, title = ?, article_categroy = ? WHERE article_id = ?;";
  const parmas = [
    article_brief,
    article_img,
    content,
    lable,
    title,
    article_categroy,
    article_id
  ];
  mysql.query(sql, parmas, (err) => {
    if (!err) {
      return res.json({ err: 0, message: "文章信息更新完成!" });
    } else {
      console.log(err.message);
      return res.json({
        err: -999,
        message: "更新失败,请检查网络情况再次尝试吧!",
      });
    }
  });
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值