Sequelize - блок Try не будет ловить при ошибке model.create () - PullRequest
0 голосов
/ 01 мая 2020

Я хочу иметь возможность перенаправить пользователя веб-сайта, если при добавлении чего-либо в базу данных возникает ошибка (ошибка проверки на стороне сервера, например, строка, содержащая символ не alphanumeri c или что-то еще). В настоящее время блок 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 => ...), похоже, ничего не делает и является лишь слабой попыткой при получении этого на работу. Я думаю, что я мог бы сделать это, если бы мне не нужно. Любой совет очень ценится.

1 Ответ

0 голосов
/ 01 мая 2020

Используйте async / await и пакет express -asyn c -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('/');
  }
}

...