Ошибка при обработке запросов postresql и nodejs - PullRequest
0 голосов
/ 30 октября 2018

Я, похоже, изо всех сил пытаюсь обработать любые ошибки базы данных в моем приложении. У меня есть простой запрос, который обновляет пароль пользователя

// Update Users Password
async function updatePassword(password, id) {
  const client = await pool.connect();
  const sql = format('UPDATE users SET password = $1 WHERE id = $2');
  try {
    await pool.query(sql, [password, id]);
  } catch (e) {
    console.error('Error Occurred', e);
    client.release();
  }
}

На стороне сервера, у меня есть это в моем route.js

const newPassword = bcrypt.hashSync(req.body.update_password, 10);
try {
  await queries.updatePassword(newPassword, req.body.user_id);
  res.status(200).send({ result: 'Password Updated Successfully' });
} catch (e) {
  res.status(400).send({ result: 'Oops, please try again' });
}

Если в базе данных нет ошибок, это работает, как и ожидалось, но если, например, я предоставляю строку в качестве своего идентификатора (форсирование ошибки), я получаю эту ошибку, как ожидается, на консоль

Error Occurred { error: invalid input syntax for integer: "string"

но все равно res.status(200).send({ result: 'Password Updated Successfully' }); отправлено.

Зарегистрирован как

POST /update_password 200

Как я могу зафиксировать ошибку, так как считал, что она в блоке try / catch?

Спасибо

1 Ответ

0 голосов
/ 02 ноября 2018

Ваша проблема не имеет отношения к библиотекам, которые вы используете. Вы просто неправильно используете async/await сообщение об ошибке.

Ваша функция updatePassword не перебрасывает ошибку, тем самым проглатывая ее. Сделайте повторную ошибку, и ошибка будет сообщена правильно:

catch (e) {
    console.error('Error Occurred', e);
    throw e;
  }

Что касается кода базы данных, он также выглядит плохо - вы выделяете новое соединение внутри метода, но освобождаете его только внутри catch, что означает, что соединение останется занятым, если не возникнет ошибка, что приведет к быстрому истощению пула соединений. .

...