使用Express和Postgres构建的应用程序。
我正在使用body解析器从表单获取逗号分隔的值。通常,这样的查询将适用于更新表中的一种产品:
>>> filename = 'abc.exe'
>>> filename.split('.')[0]
'abc'
>>> filename = 'abc.exe.gz'
>>> filename.split('.')[0]
'abc'
但是,现在我正在尝试使用不同的数据同时更新多行。我看到了先前的问题并得出了结论,但仍然出现查询错误:
const sqlProdOrder = 'UPDATE product_index SET product_ordered = $2 WHERE product_id = $1';
这是快递的帖子:
const sqlProdOrder = "WITH sample (product_id, product_ordered) AS ( SELECT * FROM unnest(ARRAY['$2'], ARRAY['$1'])) UPDATE product_index SET product_ordered = s.ordered FROM sample s WHERE product_id = s.id";
});
当然,使用这两个“ sqlProdOrder”查询都会导致我被发送到/ error / 404。
我已经在控制台上记录了身体分析器数据,一切都进行得很好。我确实认为“ sqlProdOrder”的第二个示例可以工作。
非常感谢您的帮助。我相信我需要使用unnest,但是我真的不知道如何使用它,如您在我的示例中看到的那样。
答案 0 :(得分:0)
使用以下代码,简而言之,使用第一个sqlProdOrder
查询,这是调用更新查询的理想方式。
Blockquote
编辑:$ 1我使用ANY,因为它是整数数组。
router.post('/order', auth.check.bind(auth), (req, res) => {
const { product_id, product_ordered } = req.body;
db.query(
'UPDATE product_index SET product_ordered = $2 WHERE product_id = ANY($1)',
[product_id, product_ordered]
)
.then(results => {
if (results.rowCount === 0) {
res.redirect('/products');
return;
}
res.redirect('/');
})
.catch(err => {
res.redirect('/error/404');
});
});