У меня есть следующий маршрут, который получает некоторые данные и затем сохраняет их в mon go db
код маршрутизатора
router.post('/addPatient',async (req,res)=>{
let response = await patientRepo.addUser(req.body);
res.send(response);
});
код хранилища
addUser = function(patientData){
return new Promise((resolve,reject)=>{
openDbConn().then((db)=>{
let patient = new Patient(patientData);
patient.save()
.then(item=> resolve(status.STATUS_CODES.PATIENT_SAVE_SUCCESS))
.catch(err => resolve(status.STATUS_CODES.PATIENT_SAVE_FAILED)) /*see this line*/
.finally(()=> db.close());
}).catch(dbErr=> resolve(dbErr));
});
}
Что я я делаю, я всегда разрешаю обещание от функции addUser, даже если это не удается. Потому что, если я отклоню обещание, то в моем файле маршрутизатора я должен изменить код маршрута, как показано ниже, для обработки отклоненного обещания,
router.post('/addPatient',async (req,res,next)=>{
try{
let response = await patientRepo.addUser(req.body);
res.send(response);
}catch(err){
next(err); /**This sends an html response generated by server for the error**/
}
});
Сценарий состоит в том, что я хочу отправить свои пользовательские коды на если клиент в случае какого-либо исключения, но при отклонении обещания сервер отвечает настраиваемой страницей html для внутренней ошибки сервера 500. Но при разрешении я могу передать описание ошибки и код и, следовательно, для маршрутизатора не требуется перехват попытки код.
Так что, с этим подходом можно go. Это условно? или хорошо?