search.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. , 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. } else {
  41. doSearch = search.searchKeyword(keyword, {});
  42. }
  43. var result = {};
  44. doSearch
  45. .then(function(data) {
  46. result.meta = data.meta;
  47. return Page.populatePageListToAnyObjects(data.data);
  48. }).then(function(pages) {
  49. result.data = pages.filter(function(page) {
  50. if (Object.keys(page).length < 12) { // FIXME: 12 is a number of columns.
  51. return false;
  52. }
  53. return true;
  54. });
  55. return res.json(ApiResponse.success(result));
  56. })
  57. .catch(function(err) {
  58. return res.json(ApiResponse.error(err));
  59. });
  60. };
  61. return actions;
  62. };