поиск по неполному названию записи

193
21 июля 2018, 13:30

Запись имеет название titlePhoto, которое хранится в качестве массива строк [String]. Пытаюсь выполнить поиск по неполному названию. Как правильно это сделать? Выдает ошибку photos is not defined. Как и где объявить photos? Объявляю, но выдает ошибку.

Форма поиска:

<form class="search-form" action="/search-form" method="post">
     <input class="search-input" placeholder="Введите название" type="search" value="" name="search" id="inputSearch">
     <label for="search" class="search-label">
        <img src="/static/images/icons/search.svg">
     </label>
</form>

обработчик-post

 app.post('/search-form', function (req, res, next) {
    var inputSearch = req.body.search;
    Photo.aggregate([
        {"$match": {
            "titlePhoto": {"$regex": inputSearch, "$options":'i'}
            }}
    ], function (err, photos) {
        if(err){
            return next(err);
        }
    });
    res.render('index.ejs', {photoList: photos});
  });

обработчик get

 app.get('/', function (req, res) {
    Promise.all([
        Photo.find({}),
        Sight.find({}),
        Categories.find({})
    ]).then(function(data) {
        res.render('index.ejs', {photoList: data[0], sights: data[1], categories: data[2], isAuth: req.isAuthenticated()});
    } );
});
Answer 1

Нет 50 репы, что бы коммент писать. Ошибка photos is not defined потому что у вас эта переменная определена, как параметр в функции, а Вы пытаетесь использовать за пределами функции. Если хотите за пределами - используйте замыкания, иначе перенесите res.render в тело функции

Вариант 1 (res.render в теле функции):

app.post('/search-form', function (req, res, next) {
  var inputSearch = req.body.search;
  Photo.aggregate([
    {"$match": {
        "titlePhoto": {"$regex": inputSearch, "$options":'i'}
      }}
  ], function (err, photos) {
    if(err){
      return next(err);
    }
    res.render('index.ejs', {photoList: photos});
  });
});

Вариант 2 (через замыкание):

app.post('/search-form', function (req, res, next) {
  var inputSearch = req.body.search;
  var _photos;
  Photo.aggregate([
    {"$match": {
        "titlePhoto": {"$regex": inputSearch, "$options":'i'}
      }}
  ], function (err, photos) {
    if(err){
      return next(err);
    }
    _photos = photos;
  });
  res.render('index.ejs', {photoList: this._photos});
});
READ ALSO
Конкатенировать все следущие элементы

Конкатенировать все следущие элементы

Имеется input, который должен разделить имя и фамилиюДля этого я использую метод split

178
Смена background с помощью js

Смена background с помощью js

Подскажите пожалуйста новичку как правильно решить задачкуЕсть inputs при нажатии на которые мы получаем value 'red,blue

194
Как использовать (запускать) class в цикле

Как использовать (запускать) class в цикле

Внесу некоторые изменения в вопрос, опишу поподробнее

183
Как завершить выполнение скрипта на jquery?

Как завершить выполнение скрипта на jquery?

В модальном окне с 2 input формами подключен ajax запрос на перехват нажатия кнопки отправки и пост запросом передает данные в бдПроблема в том...

209