search.js 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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, next) => {
  6. try {
  7. let q = req.query.q
  8. let qRegexp = new RegExp(q, 'g')
  9. let offset = +req.query.offset || 0
  10. let count = await Post.count({
  11. where: {
  12. content: { $like: '%' + q + '%' }
  13. }
  14. })
  15. let posts = await Post.findAll({
  16. where: {
  17. content: { $like: '%' + q + '%' }
  18. },
  19. order: [ ['id', 'DESC'] ],
  20. include: Post.includeOptions(),
  21. limit: 10,
  22. offset
  23. })
  24. let retPosts = posts.map(p => {
  25. let ret = p.toJSON()
  26. ret.content = ret.content.replace(qRegexp, '<b>' + q + '</b>')
  27. return ret
  28. })
  29. let remainingResults = count - (offset + 10)
  30. let next;
  31. if(remainingResults < 0) {
  32. next = 0
  33. } else if(remainingResults < 10) {
  34. next = remainingResults
  35. } else {
  36. next = 10
  37. }
  38. res.json({
  39. posts: retPosts,
  40. offset: offset + 10,
  41. next
  42. })
  43. } catch (e) { next(e) }
  44. })
  45. module.exports = router