GetArticleList.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. const API = require("../../../lib/API");
  2. const db = require("../../../plugin/DataBase/db");
  3. const AccessControl = require("../../../lib/AccessControl");
  4. const { BaseStdResponse } = require("../../../BaseStdResponse");
  5. class GetArticleList extends API {
  6. constructor() {
  7. super();
  8. this.setPath('/Admin/Article/List')
  9. this.setMethod('GET')
  10. }
  11. async onRequest(req, res) {
  12. let { uuid, session, pagesize, current, type, state } = req.query
  13. if ([uuid, session, pagesize, current, type, state].some(value => value === '' || value === null || value === undefined)) {
  14. return res.json({
  15. ...BaseStdResponse.MISSING_PARAMETER,
  16. endpoint: 1513126
  17. })
  18. }
  19. // 检查 session
  20. if (!await AccessControl.checkSession(uuid, session))
  21. return res.status(401).json({
  22. ...BaseStdResponse.ACCESS_DENIED
  23. })
  24. // 检查权限
  25. let permission = await AccessControl.getPermission(uuid)
  26. if (!permission.includes("admin") && !permission.includes("article"))
  27. return res.json({
  28. ...BaseStdResponse.PERMISSION_DENIED
  29. })
  30. // 转换参数类型
  31. pagesize = parseInt(pagesize, 10)
  32. current = parseInt(current, 10)
  33. // 校验分页参数
  34. if (isNaN(pagesize) || pagesize <= 0) {
  35. return res.json({
  36. ...BaseStdResponse.ERR,
  37. msg: '参数错误'
  38. })
  39. }
  40. if (isNaN(current) || current <= 0) {
  41. return res.json({
  42. ...BaseStdResponse.ERR,
  43. msg: '参数错误'
  44. })
  45. }
  46. // 计算分页的 offset
  47. const offset = (current - 1) * pagesize
  48. let sql = `
  49. SELECT
  50. a.id,
  51. a.title,
  52. a.cover,
  53. a.describe,
  54. a.type,
  55. a.time,
  56. a.views,
  57. a.state,
  58. u.username AS author
  59. FROM
  60. article a
  61. LEFT JOIN
  62. users u
  63. ON
  64. a.author = u.uuid
  65. WHERE
  66. a.type = ?
  67. AND a.state = ?
  68. ORDER BY
  69. a.id DESC
  70. `
  71. // 查询文章总数,方便返回总页数
  72. let countSql = `
  73. SELECT COUNT(*) AS total
  74. FROM article a
  75. WHERE a.type = ?;
  76. `
  77. try {
  78. // 获取文章列表
  79. let articles = await db.query(sql, [type, state])
  80. // 获取总记录数
  81. let countResult = await db.query(countSql, [type])
  82. let total = countResult[0].total;
  83. // 计算总页数
  84. const totalPages = Math.ceil(total / pagesize)
  85. // 返回结果
  86. res.json({
  87. ...BaseStdResponse.OK,
  88. data: articles || [],
  89. pagination: {
  90. current: current,
  91. pagesize: pagesize,
  92. total: total,
  93. totalPages: totalPages
  94. }
  95. })
  96. } catch (err) {
  97. this.logger.error(`获取文章列表失败!${err.stack}`)
  98. res.json({
  99. ...BaseStdResponse.ERR,
  100. msg: '获取文章列表失败!',
  101. endpoint: 153127
  102. })
  103. }
  104. }
  105. }
  106. module.exports.GetArticleList = GetArticleList;