跨域访问设置:
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: "更新失败,请检查网络情况再次尝试吧!",
});
}
});
本文档展示了如何进行跨域访问配置,包括允许的源、头部和方法。同时,详细阐述了Token的生成与验证流程,以及MD5加密方法。此外,还涵盖了邮件发送模块的实现,用于发送验证码。在数据操作方面,有留言页码数据请求、按用户名获取文章、用户留言和回复的设置,以及获取文章标签和分类的相关接口。所有这些功能都涉及到了数据库查询和响应处理。
948

被折叠的 条评论
为什么被折叠?



