У меня есть специальный чехол, для которого я хочу очистить возможную причину ошибки 503. Следующий фрагмент кода имеет заявление улова, который работает, когда система не может найти какие-либо результатыОбработка ошибки 503 в Express/Node.js, особенно в случае TryCatch
app.post('/api/fetch/user', function(req, res){
var email = req.body.emailTxt;
db.one('SELECT * FROM users WHERE email=$1', [email])
.then(function(data){
console.log('DATA:', data);
var userCard = { id: data.user_id, name: data.user_name,
email: data.email, regDate: data.date_created };
res.status(200).json({ 'valid': true, '_payload': userCard });
})
.catch(function(error){
if(error.search(/No data returned from the query/im) > 0) // regex case insensitive search and search multiline as source string is multiline
res.status(500).send('Invalid Request Match');
else
res.status(500).send('ERROR: '+error);
})
});
Когда мой API вызов сделан с этой целью API точки и когда результат не нашел ходы управления в catch()
, который хорошо, но довольно странно он возвращает 503 - Request timeout
ошибки. Я попытался удалить условия в if()
, чтобы отлаживать, но похоже, что неважно, но if-else
не работает в ExpressJs.
Примечание: все работает хорошо, а также когда управление остается в .then()
. Если я удалю if,else
и сохраняю сообщение об ошибке/ответе ошибки, все работает нормально. В моем API нет ничего особенного; это всего лишь один сценарий, который я подготовил для тестирования API.
Одна опечатка, хотя, 'catch' вы упомянули не принимает функцию и позволяет только передать параметр. Да, вы указали на правильное направление, что 'error' не имеет' .search() '. Что делать в этом случае, если я хочу проанализировать строку сообщения об ошибке? Ошибка отображается на консоли (в многострочной) следующим образом: 'ERROR: QueryResultError { code: queryResultErrorCode.noData сообщение:« Нет данных, возвращаемых из запроса." получено: 0 запрос:" SELECT * FROM users WHERE email='[email protected] 'И password =' 1234 '" }' –
Hurrey !! решил проблему в соответствии с вашими указаниями. Разберитесь с ошибкой 'error 'object to string using' error.toString(); 'поскольку' .toString() 'является глобальным методом, и это сработало для меня. –
Так как ваша база данных возвращает правильный' QueryResultError', я думаю, вы можете сделать его безопасным в блок 'catch'. Отредактирован ответ с лучшим подходом к обработке ошибок. – iKoala