GetArticle.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. const API = require("../../lib/API");
  2. const db = require("../../plugin/DataBase/db");
  3. const { BaseStdResponse } = require("../../BaseStdResponse");
  4. class GetArticle extends API {
  5. constructor() {
  6. super();
  7. this.setPath('/Article');
  8. this.setMethod('GET');
  9. }
  10. async onRequest(req, res) {
  11. const { slug } = req.query;
  12. if (!slug) {
  13. return res.json({
  14. ...BaseStdResponse.MISSING_PARAMETER,
  15. endpoint: 153123
  16. });
  17. }
  18. const safeSlug = String(slug).trim();
  19. try {
  20. await db.query('UPDATE article SET views = views + 1 WHERE state = 1 AND slug = ?', [safeSlug]);
  21. const sql = `
  22. SELECT
  23. a.slug,
  24. a.title,
  25. a.cover,
  26. a.\`describe\`,
  27. a.content,
  28. a.type,
  29. a.views,
  30. a.time,
  31. u.username AS author
  32. FROM article a
  33. LEFT JOIN users u ON a.author = u.uuid
  34. WHERE a.state = 1 AND a.slug = ?
  35. `;
  36. const rows = await db.query(sql, [safeSlug]);
  37. if (!rows || rows.length !== 1)
  38. return res.json({
  39. ...BaseStdResponse.MISSING_FILE,
  40. msg: '文章不存在或无查看权限'
  41. });
  42. res.json({
  43. ...BaseStdResponse.OK,
  44. data: rows[0]
  45. });
  46. } catch (err) {
  47. this.logger.error(`获取文章失败!${err.stack}`);
  48. res.json({
  49. ...BaseStdResponse.ERR,
  50. msg: '获取文章失败!'
  51. });
  52. }
  53. }
  54. }
  55. module.exports.GetArticle = GetArticle;