Sekuel- Blok percobaan tidak akan menangkap kesalahan model.create()

Saya ingin dapat merutekan ulang pengguna situs web jika terjadi kesalahan saat menambahkan sesuatu ke database (kesalahan validasi sisi server, seperti string yang berisi simbol non alfanumerik atau semacamnya). Saat ini blok try-catch tidak menangkap apa pun meskipun model.create() gagal. Bagaimana saya bisa menulis ulang ini untuk keluar dari blok percobaan dan merutekan ulang kembali ke '/' jika entri yang dicoba tidak valid? Ini yang saya punya (btw, Request dan Ride1 adalah nama modelnya):

/* 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('/');
  }
});

Hal .catch(err =>...) sepertinya tidak menghasilkan apa-apa dan hanya upaya lemah untuk membuat ini berfungsi. Saya rasa saya bisa melakukannya jika saya tidak memerlukannya. Saran apa pun sangat kami hargai.


person jacobcline    schedule 30.04.2020    source sumber


Jawaban (1)


Gunakan paket async/await dan paket 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