index.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. // 云函数入口文件
  2. const cloud = require('wx-server-sdk')
  3. cloud.init()
  4. const db = cloud.database()
  5. const _ = db.command
  6. // 云函数入口函数
  7. exports.main = async (event, context) => {
  8. const {
  9. OPENID
  10. } = cloud.getWXContext()
  11. if (event.pub_id) {
  12. const messages = await db.collection('message')
  13. .aggregate()
  14. .match({
  15. pub_id: event.pub_id
  16. })
  17. .sort({
  18. publish_time: -1
  19. })
  20. .skip(event.page_token)
  21. .limit(event.page_size)
  22. .end()
  23. return {
  24. list: messages.list,
  25. next_page_token: event.page_token + messages.list.length,
  26. status: 'OK'
  27. }
  28. } else if (event.keyword) {
  29. const regexp = db.RegExp({
  30. regexp: event.keyword,
  31. options: 'i'
  32. })
  33. const messages = await db.collection('message')
  34. .aggregate()
  35. .match(_.or([{
  36. name: regexp
  37. }, {
  38. brief: regexp
  39. }, {
  40. detail: regexp
  41. }]))
  42. .sort({
  43. publish_time: -1
  44. })
  45. .skip(event.page_token)
  46. .limit(event.page_size)
  47. .lookup({
  48. from: 'publisher',
  49. localField: 'pub_id',
  50. foreignField: '_id',
  51. as: 'publisher'
  52. })
  53. .end()
  54. for (let i = 0; i < messages.list.length; i++) {
  55. messages.list[i].publisher = messages.list[i].publisher[0]
  56. }
  57. await db.collection('search')
  58. .add({
  59. data: {
  60. user_id: OPENID,
  61. keyword: event.keyword || '',
  62. search_time: new Date()
  63. }
  64. })
  65. return {
  66. list: messages.list,
  67. next_page_token: event.page_token + messages.list.length,
  68. status: 'OK'
  69. }
  70. } else {
  71. const messages = await db.collection('message')
  72. .aggregate()
  73. .sort({
  74. publish_time: -1
  75. })
  76. .skip(event.page_token)
  77. .limit(event.page_size)
  78. .lookup({
  79. from: 'publisher',
  80. localField: 'pub_id',
  81. foreignField: '_id',
  82. as: 'publisher'
  83. })
  84. .end()
  85. for (let i = 0; i < messages.list.length; i++) {
  86. messages.list[i].publisher = messages.list[i].publisher[0]
  87. }
  88. return {
  89. list: messages.list,
  90. next_page_token: event.page_token + messages.list.length,
  91. status: 'OK'
  92. }
  93. }
  94. }