使用bodyparser在多行上创建Postgres更新

时间:2019-02-20 15:24:49

标签: node.js postgresql express body-parser

使用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,但是我真的不知道如何使用它,如您在我的示例中看到的那样。

1 个答案:

答案 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');
    });
});