search.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. module.exports = function(crowi, app) {
  2. 'use strict';
  3. var debug = require('debug')('crowi:routes:search')
  4. , Page = crowi.model('Page')
  5. , User = crowi.model('User')
  6. , ApiResponse = require('../util/apiResponse')
  7. , sprintf = require('sprintf')
  8. , actions = {};
  9. var api = actions.api = {};
  10. actions.searchPage = function(req, res) {
  11. var keyword = req.query.q || null;
  12. var search = crowi.getSearcher();
  13. if (!search) {
  14. return res.json(ApiResponse.error('Configuration of ELASTICSEARCH_URI is required.'));
  15. }
  16. return res.render('search', {
  17. q: keyword,
  18. });
  19. };
  20. /**
  21. * @api {get} /search search page
  22. * @apiName Search
  23. * @apiGroup Search
  24. *
  25. * @apiParam {String} q keyword
  26. * @apiParam {String} path
  27. */
  28. api.search = function(req, res){
  29. var keyword = req.query.q || null;
  30. var tree = req.query.tree || null;
  31. if (keyword === null || keyword === '') {
  32. return res.json(ApiResponse.error('keyword should not empty.'));
  33. }
  34. var search = crowi.getSearcher();
  35. if (!search) {
  36. return res.json(ApiResponse.error('Configuration of ELASTICSEARCH_URI is required.'));
  37. }
  38. var doSearch;
  39. if (tree) {
  40. doSearch = search.searchKeywordUnderPath(keyword, tree, {});
  41. } else {
  42. doSearch = search.searchKeyword(keyword, {});
  43. }
  44. var result = {};
  45. doSearch
  46. .then(function(data) {
  47. result.meta = data.meta;
  48. return Page.populatePageListToAnyObjects(data.data);
  49. }).then(function(pages) {
  50. result.data = pages.filter(function(page) {
  51. if (Object.keys(page).length < 12) { // FIXME: 12 is a number of columns.
  52. return false;
  53. }
  54. return true;
  55. });
  56. return res.json(ApiResponse.success(result));
  57. })
  58. .catch(function(err) {
  59. return res.json(ApiResponse.error(err));
  60. });
  61. };
  62. return actions;
  63. };