处理 postgresql 和节点 js 查询时出错
Error handling postresql and nodejs query
我似乎在努力处理我的应用程序中的任何数据库错误。我有一个更新用户密码的简单查询
// Update Users Password
async function updatePassword(password, id) {
const client = await pool.connect();
const sql = format('UPDATE users SET password = WHERE id = ');
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 块中的错误?
谢谢
您的问题与您使用的库无关。您只是误用了 async/await
错误报告。
您的函数 updatePassword
没有重新抛出错误,因此吞没了它。让它重新抛错,会正确报错:
catch (e) {
console.error('Error Occurred', e);
throw e;
}
至于数据库代码,它看起来也很糟糕——你在方法内部分配了一个新的连接,但只在catch
内部释放它,这意味着当没有错误抛出时连接将保持占用状态,因此很快耗尽连接池。
我似乎在努力处理我的应用程序中的任何数据库错误。我有一个更新用户密码的简单查询
// Update Users Password
async function updatePassword(password, id) {
const client = await pool.connect();
const sql = format('UPDATE users SET password = WHERE id = ');
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 块中的错误?
谢谢
您的问题与您使用的库无关。您只是误用了 async/await
错误报告。
您的函数 updatePassword
没有重新抛出错误,因此吞没了它。让它重新抛错,会正确报错:
catch (e) {
console.error('Error Occurred', e);
throw e;
}
至于数据库代码,它看起来也很糟糕——你在方法内部分配了一个新的连接,但只在catch
内部释放它,这意味着当没有错误抛出时连接将保持占用状态,因此很快耗尽连接池。