diff --git a/src/public/javascripts/services/search_notes.js b/src/public/javascripts/services/search_notes.js index ab28ba00f..c8d726b9c 100644 --- a/src/public/javascripts/services/search_notes.js +++ b/src/public/javascripts/services/search_notes.js @@ -80,12 +80,17 @@ async function doSearch(searchText) { return; } - const results = await server.get('search/' + encodeURIComponent(searchText)); + const response = await server.get('search/' + encodeURIComponent(searchText)); + + if (!response.success) { + infoService.showError("Search failed.", 3000); + return; + } $searchResultsInner.empty(); $searchResults.show(); - for (const result of results) { + for (const result of response.results) { const link = $('', { href: 'javascript:', text: result.title diff --git a/src/routes/api/search.js b/src/routes/api/search.js index f5267d6e6..c344841c6 100644 --- a/src/routes/api/search.js +++ b/src/routes/api/search.js @@ -9,7 +9,17 @@ const searchService = require('../../services/search'); async function searchNotes(req) { const noteIds = await searchService.searchForNoteIds(req.params.searchString); - return noteIds.map(noteCacheService.getNotePath).filter(res => !!res); + try { + return { + success: true, + results: noteIds.map(noteCacheService.getNotePath).filter(res => !!res) + } + } + catch { + return { + success: false + } + } } async function searchFromNote(req) { diff --git a/src/services/parse_filters.js b/src/services/parse_filters.js index 0ae1bba17..17166b1fa 100644 --- a/src/services/parse_filters.js +++ b/src/services/parse_filters.js @@ -45,18 +45,20 @@ function calculateSmartValue(v) { module.exports = function (searchText) { // if the string doesn't start with attribute then we consider it as just standard full text search if (!searchText.trim().startsWith("@")) { + const sanitizedSearchText = searchText.replace(/[^\w ]+/g, ""); + return [ { relation: 'and', name: 'text', operator: '=', - value: searchText + value: sanitizedSearchText }, { relation: 'or', name: 'noteId', operator: '=', - value: searchText + value: sanitizedSearchText } ] }