Блок Sequelize-Try не поймает ошибку model.create()

Я хочу иметь возможность перенаправить пользователя веб-сайта, если при добавлении чего-либо в базу данных возникает ошибка (ошибка проверки на стороне сервера, например, строка, содержащая небуквенно-цифровой символ или что-то в этом роде). В настоящее время блок try-catch ничего не перехватывает даже в случае сбоя model.create(). Как я могу переписать это, чтобы вывести его из блока try и перенаправить обратно на «/», если будет предпринята неверная запись? Вот что у меня есть (кстати, Request и Ride1 — это названия моделей):

/* POST request */
router.post('/', function(req, res, next){

  /*a bunch of variable initializations to get form data*/

  try{
    Request.create({
      serial_num: serial_num,
      meter_reading: meter_reading,
      request_type: request_type
    })
      .catch(err => {
        throw err 
      })

    Ride1.create({
       serial_num: serial_num,
       meter_reading: meter_reading,
       request_type: request_type
     })
       .catch(err => {
         throw err 
       })

    res.redirect('/thankYou')
  }
  catch (e){
    console.log(e);
    res.redirect('/');
  }
});

Кажется, что .catch(err =>...) ничего не делает, и это была просто слабая попытка заставить это работать. Я думаю, что мог бы сделать это, если бы мне не нужно. Любые советы очень ценятся.


person jacobcline    schedule 30.04.2020    source источник


Ответы (1)


Используйте async/await и пакет express-async-wrap:

const wrap = require('express-async-wrap')
...
router.post('/', async function(req, res, next){
 try{
    await Request.create({
      serial_num: serial_num,
      meter_reading: meter_reading,
      request_type: request_type
    })

    await Ride1.create({
       serial_num: serial_num,
       meter_reading: meter_reading,
       request_type: request_type
     })

    res.redirect('/thankYou')
  }
  catch (e){
    console.log(e);
    res.redirect('/');
  }
}

person Anatoly    schedule 30.04.2020