Я ломаю голову, пытаясь найти лучший способ обработки ошибок от определенных действий пользователя.Я использую Express в качестве своего веб-сервера, и хотя он работает, по большей части я получаю не очень полезные, общие сообщения об ошибках.Например, в приведенном ниже коде я получаю сообщение об ошибке Request failed with status code 400
на стороне клиента для первых двух условий / исключений в блоке try.
Как мне подойти к этому в следующем примере?
Экспресс-контроллер на стороне сервера
async function voteInPoll (req, res) {
const { category, pollId } = req.params;
const { name, choiceId, voterId } = req.body;
try {
const poll = await Poll.findById(pollId);
// Check if user has already voted in poll
const hasVoted = poll.votedBy.some(voter => voter.equals(voterId));
if (!voterId) { // Check if user is authenticated
res
.sendStatus(400)
.json({ message: 'Sorry, you must be logged in to vote' });
} else if (voterId && hasVoted) {
res
.sendStatus(400)
.json({ message: 'Sorry, you can only vote once' });
} else {
const choice = await poll.choices.id(choiceId);
const votedChoice = { name, votes: choice.votes + 1 };
await choice.set(votedChoice);
await poll.votedBy.push(voterId);
poll.save();
res
.sendStatus(200)
.json({
message: 'Thank you for voting. Find other polls at: ',
poll,
});
}
} catch (error) {
throw new Error(error);
}
}
React / Redux Action
export const voteInPoll = (category, pollId, votedItem, voterId) => async dispatch => {
try {
const response = await axios.post(
`http://localhost:3050/polls/${category}/${pollId}/vote`,
{
...votedItem,
voterId,
}
);
dispatch({ type: store.polls.VOTE_SUCCESS, payload: response.data.poll });
} catch (error) {
console.log(error);
dispatch({ type: store.polls.VOTE_FAILURE, payload: error.message });
}
};
Редактировать
Мне кажется довольно странным, что я получаю ожидаемый ответ об ошибке, как показано ниже на вкладке Сеть в инструментах разработчика Chrome.