У меня есть маршрутизатор, который выглядит следующим образом.
router.post('/',async (req,res)=>{
const actor = new Actor();
actor.name = req.body.actor_name;
actor.imdb_url = req.body.imdb_url;
await actor.save()
req.flash('success_message',"You've successfully added new Actor!");
res.redirect('/admin/actors');
})
Я не проверяю, сохранено это или нет. потому что я использую пакет express-async-errors
, который автоматически оборачивает его в блок try catch, и в случае ошибки он выдает ошибку следующему промежуточному программному обеспечению. Вот эта ошибка промежуточного программного обеспечения.
app.use(function(err,req,res,next){
})
Теперь, если actor.save () возвращает ошибку проверки, я застреваю. как вы знаете, это приведет меня к глобальному промежуточному программному обеспечению, которое я только что показал вам. Затем, иногда, когда возникает ошибка проверки, мне приходится перенаправлять пользователей в / admin / movies / create, иногда / admin / users / create и e.t.c.
Решение 1) Я думаю, что нужно обернуть свой собственный блок try catch в маршрутизаторе и в catch, я буду знать, куда перенаправить. но этот путь плох, потому что я не хочу оборачивать свой собственный метод try, потому что я хочу, чтобы код выглядел красиво.
Решение 2) Если я использую решение 1, то неизбежно, что я буду писать операторы if в блоке catch.
catch(err){
if(err.name == "ValidationError") res.redirect("admin/movies/create");
else next(err);
}
как то так.
Есть ли лучший способ?