Предупреждение о необработанном отказе при использовании findOne() в NodeJS

#node.js

#node.js

Вопрос:

Я работаю над проектом, в котором на данный момент необходимо перенаправить пользователя, если идентификатор курса не существует. Это код:

 router.get('/taller/:id', (req, res) => {
  let tallerId = req.params.id;
  Taller.findOne({_id: tallerId}).then(taller => {
    if(taller) {
      res.render('taller');
    } else {
      res.redirect('/dashboard');
    }
  });
});  

Идея заключается в том, что если идентификатор, переданный в параметрах, действительно существует в коллекции Talleres, отображается более высокий вид. Но, если это не так, то пользователь должен быть перенаправлен на панель мониторинга.

Когда выполняется код с недопустимым идентификатором, я получаю:

Предупреждение о необработанном отказе: ошибка преобразования в ObjectId не удалось для значения «5c7d9da0567a653a40295bc}» в пути «_id» для модели «Выше»

Заранее спасибо за любую помощь. Том.

Комментарии:

1. Что именно вы хотите, чтобы произошло, или ожидаете, что произойдет? Вы сообщаете нам о проблеме, с которой сталкиваетесь, но не о том, каково ваше ожидаемое поведение.

2. @jamesemanon там я его обновил!

3. можете ли вы увеличить размер при наличии данных?

Ответ №1:

Вы не определили блок catch, поэтому отклонения, т. е. ошибки, не обрабатываются, попробуйте приведенный ниже код

 router.get('/taller/:id', (req, res) => {
  let tallerId = req.params.id;
  Taller.findOne({_id: tallerId}).then(taller => {
    if(taller) {
      res.render('taller');
    } else {
      res.redirect('/dashboard')
    }
  });
}).catch(err=>{console.log(err)});  

Комментарии:

1. Проблема в том, что на самом деле оно не перенаправляет меня, когда не найдено ничего выше.

2. поскольку вы получите массив в результате запроса, не могли бы вы, пожалуйста, попробовать условие как if(taller.length!=0) вместо if (taller) один раз