Запись имеет название 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()});
} );
});
Нет 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});
});
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости