63 lines
2.1 KiB
JavaScript
63 lines
2.1 KiB
JavaScript
const dayjs = require('dayjs');
|
|
const db = require('./db')
|
|
const router = require('express').Router();
|
|
|
|
// 完整的请求接口地址: /api/comment/web/query
|
|
router.all('/web/query', async (req, res) => {
|
|
let id = req.query['id']; // 获取要查询文章的编号
|
|
if (!id || id < 1) {
|
|
// 参数不正确 直接返回空数组
|
|
res.send([])
|
|
} else {
|
|
const list = await db.query('select * from comment where article_id =? order by id desc', [id]);
|
|
// 循环所有的列表 将ip->address
|
|
Array.from(list).forEach(c => {
|
|
c.address = getIpAddress(c.ip);
|
|
});
|
|
res.send(list)
|
|
}
|
|
});
|
|
// 发表评论
|
|
router.post('/web/add', async (req, res) => {
|
|
let commentData = req.body; // 获取到post的json数据
|
|
console.log(commentData)
|
|
if (!commentData || !commentData.article_id || !commentData.content) {
|
|
res.send({ status: false, message: "参数不对" })
|
|
} else {
|
|
try {
|
|
// 发表时间
|
|
commentData.publish_time = dayjs().format("YYYY-MM-DD HH:mm:ss")
|
|
// 评论者ip
|
|
commentData.ip = getIp(req.ip);
|
|
console.log(commentData)
|
|
await db.query('insert into comment set ?', commentData);
|
|
res.send({ status: true })
|
|
} catch (e) {
|
|
console.log(e)
|
|
res.send({ status: false, message: e.message })
|
|
}
|
|
}
|
|
});
|
|
function getIp(ip) {
|
|
const ipPatch = ip.match(/\d+\.\d+\.\d+\.\d+/)
|
|
if (ipPatch) return ipPatch[0]
|
|
return ip;
|
|
}
|
|
// npm i ip2region
|
|
const IP2Region = require("ip2region").default; // 引用依赖库
|
|
const query = new IP2Region(); // 实例化库
|
|
// 根据ip查询归属地
|
|
function getIpAddress(ip) {
|
|
const result = query.search(ip);
|
|
if (result.isp == '本机地址' || result.isp == '内网IP') {
|
|
return '内部网络';
|
|
}
|
|
if (!result.province) return result.country;
|
|
return (result.country != '中国' ? result.country : '') + "-" + result.province + "-" + result.city;
|
|
}
|
|
|
|
|
|
router.get('/ip', (req, res) => {
|
|
res.send(getIp(req.ip))
|
|
})
|
|
module.exports = router |