search.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. module.exports = function(crowi, app) {
  2. 'use strict';
  3. var debug = require('debug')('growi:routes:search')
  4. , Page = crowi.model('Page')
  5. , User = crowi.model('User')
  6. , ApiResponse = require('../util/apiResponse')
  7. , actions = {};
  8. var api = actions.api = {};
  9. actions.searchPage = function(req, res) {
  10. var keyword = req.query.q || null;
  11. var search = crowi.getSearcher();
  12. if (!search) {
  13. return res.json(ApiResponse.error('Configuration of ELASTICSEARCH_URI is required.'));
  14. }
  15. return res.render('search', {
  16. q: keyword,
  17. });
  18. };
  19. /**
  20. * @api {get} /search search page
  21. * @apiName Search
  22. * @apiGroup Search
  23. *
  24. * @apiParam {String} q keyword
  25. * @apiParam {String} path
  26. */
  27. api.search = function(req, res) {
  28. var keyword = req.query.q || null;
  29. var tree = req.query.tree || null;
  30. if (keyword === null || keyword === '') {
  31. return res.json(ApiResponse.error('keyword should not empty.'));
  32. }
  33. var search = crowi.getSearcher();
  34. if (!search) {
  35. return res.json(ApiResponse.error('Configuration of ELASTICSEARCH_URI is required.'));
  36. }
  37. var doSearch;
  38. if (tree) {
  39. doSearch = search.searchKeywordUnderPath(keyword, tree, {});
  40. }
  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. };