错误处理postresql和nodejs查询

时间:2018-10-30 14:38:54

标签: node.js postgresql node-postgres

我似乎在努力处理应用程序中的任何数据库错误。我有一个简单的查询,可以更新用户密码

// 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();
  }
}

服务器端,我的routes.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' });
}

如果没有数据库错误,那么它将按预期工作,但是例如,如果我提供一个字符串作为我的ID(强制错误),那么我会按预期将此错误打印到控制台

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 :(得分:1)

您的问题与您使用的库无关。您只是滥用async/await错误报告。

您的函数updatePassword不会重新引发错误,因此会误将其吞没。重新抛出错误,错误将被正确报告:

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

对于数据库代码,它看起来也很糟糕-您在方法内部分配了一个新连接,但仅在catch内部释放了它,这意味着当没有错误抛出时,该连接将保持被占用状态,从而迅速耗尽连接池。