search.js 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. let express = require('express')
  2. let router = express.Router()
  3. let { Post, Thread, Sequelize } = require('../models')
  4. const Errors = require('../lib/errors')
  5. router.get('/', async (req, res) => {
  6. try {
  7. let q = req.query.q
  8. let offset = +req.query.offset || 0
  9. let count = await Post.count({
  10. where: {
  11. content: { $like: '%' + q + '%' }
  12. }
  13. })
  14. let posts = await Post.findAll({
  15. where: {
  16. content: { $like: '%' + q + '%' }
  17. },
  18. order: [ ['id', 'DESC'] ],
  19. include: Post.includeOptions(),
  20. limit: 10,
  21. offset
  22. })
  23. let retPosts = posts.map(p => {
  24. let ret = p.toJSON()
  25. ret.content = ret.content.replace(q, '<b>' + q + '</b>')
  26. return ret
  27. })
  28. let remainingResults = count - (offset + 10)
  29. let next;
  30. if(remainingResults < 0) {
  31. next = 0
  32. } else if(remainingResults < 10) {
  33. next = remainingResults
  34. } else {
  35. next = 10
  36. }
  37. res.json({
  38. posts: retPosts,
  39. offset: offset + 10,
  40. next
  41. })
  42. } catch (e) {
  43. console.log(e)
  44. res.status(500)
  45. res.json({
  46. errors: [Errors.unknown]
  47. })
  48. }
  49. })
  50. module.exports = router