javascript - 使用 node-pg 处理查询错误
问题描述
我正在尝试将两个查询插入到我的 postgres 数据库中,如下所示:
const insertLineItemDB = (request, response) => {
const { wo_num, description, due_date, cost } = request.body
const query1 = 'INSERT INTO workorders (wo_id, due_date, complete) VALUES ($1, $2, 0);';
const query2 = 'INSERT INTO lineitems (wo_num, description, cost) VALUES ($1, $2, $3);';
Promise.all([
pool.query(query1, [wo_num, due_date]),
pool.query(query2, [wo_num, description, cost])
]).then(function([query1Results, query2Results]) {
response.status(201).send('Successfully inserted');
});
}
我的问题是我收到以下错误:这使我的网络应用程序error: duplicate key value violates unique constraint "workorders_pkey"
崩溃。node
我该如何处理这个错误,所以它只是给用户一个消息,但不停止整个应用程序?
解决方案
你应该在 Promise 中发现错误
Promise.all([
pool.query(query1, [wo_num, due_date]),
pool.query(query2, [wo_num, description, cost])
]).then(function([query1Results, query2Results]) {
response.status(201).send('Successfully inserted');
}).catch(function (e) {
response.status(500).send('Insert failed');
});
您还可以将 Promise 包装在 try catch 块中
try {
Promise.all([
pool.query(query1, [wo_num, due_date]),
pool.query(query2, [wo_num, description, cost])
]).then(function([query1Results, query2Results]) {
response.status(201).send('Successfully inserted');
})
} catch(e) {
response.status(500).send('Insert failed');
}
有点不是你问的,但你也可以忽略重复键
INSERT INTO workorders (wo_id, due_date, complete) VALUES ($1, $2, 0) ON CONFLICT (wo_id) DO NOTHING (https://www.postgresql.org/docs/9.5/sql-insert.html#SQL-ON-CONFLICT)
推荐阅读
- python - 无法在带有 Python 的 VS Code 中使用终端
- sharepoint - Sharepoint Online 编辑但不发布权限
- r - 计算两个向量之间相同值的数量
- ios - 具有自定义框架的 iOS 应用程序 Appstore 提交问题
- navigation - 如何将具有多个值的非二进制占用网格映射到 ROS 中的成本图?
- c++ - 调用 erase() 函数是否会在元素被擦除之前更改迭代器值?
- javascript - history.back() 在 Firefox 和 Internet Explorer 中不起作用,但在 google chrome 中起作用
- sql - SQL Server 日期格式到具有特定格式的 Datetimeoffset
- python - 单击按钮时如何停止线程(QRunnable)?
- loops - 使用 runas 命令提示符 (cmd) 循环