Я хочу заменить цепочку обещаний в моей экспресс-маршрутизации на async / await.Это делает код чистым и более читабельным.Сначала посмотрите на мой код.
Что у меня было раньше:
app.post('/search', (req,res) => {
sendRequest(req.body).then( searchDetails => {
res.send(searchDetails);
}).catch( error => {
res.status(404).send(error)
});
});
Текущий код:
app.post('/search', asyncMiddleware(async (req,res) => {
const result = await sendRequest(req.body);
res.send(result);
}));
А вот так выглядит asyncMiddleware:
const asyncMiddleware = checkedFunction => (req, res) => {
Promise
.resolve(
checkedFunction(req, res)
)
.catch( error => {
res.status(400).send(error)
});
};
Проблема начинается, когда у меня есть маршрутизация, которая включает в себя более одного состояния ошибки.
app.delete('/delete/:id', authenticate, (req, res) => {
const id = req.params.id;
if (!ObjectID.isValid(id)) {
return res.status(404).send();
}
User.findOneAndDelete({
_id: id,
_user: req.user._id
}).then((todo) => {
if (!todo) {
return res.status(404).send();
}
res.send({todo});
}).catch((e) => {
res.status(400).send();
});
});
Как я могу сделать так, чтобы asyncMiddleware вернул состояние, зависящее от ошибки?