Node.js 将$2放入CONCAT()时,Getting error无法确定参数$2的数据类型

Node.js 将$2放入CONCAT()时,Getting error无法确定参数$2的数据类型,node.js,postgresql,Node.js,Postgresql,我试图在psql中使用CONCAT函数更新故事专栏,但不知何故,不断出现错误,说它无法确定参数$2的数据类型。我哪里做错了 router.put('/:id', (req,res) => { db.query(`UPDATE stories SET story = CONCAT(story, $2) WHERE id = $1`,[req.params.id, 'text']) .then(response => { res.json({contr

我试图在psql中使用CONCAT函数更新故事专栏,但不知何故,不断出现错误,说它无法确定参数$2的数据类型。我哪里做错了

router.put('/:id', (req,res) => {
    db.query(`UPDATE stories SET story = CONCAT(story, $2) WHERE id = $1`,[req.params.id, 'text'])
      .then(response => {
        res.json({contribution:req.body.contribution_data, id:req.params.id});
      })
      .catch(err => console.log('Edit story error', err.message));
  });
更新日期:2021年5月6日 谢谢你的建议@Ayzrian

我按照建议做了PREPARE语句,但现在我得到了一个不同的错误:

“错误:无法将多个命令插入到准备好的语句中”

我采用了与文档中建议的基本相同的格式:

router.put(“/:id)”,(req,res)=>{
db.query(
`
准备testStory(int,text)作为更新故事集story=CONCAT(story,$2),其中id=1;
执行testStory($1,$2);`,
[req.params.id,“文本”]
)
更新解决方案
事实证明,我可以通过在参数化值($1)之后执行::text来设置数据类型。以下是解决方案代码:

db.query(
      `
     UPDATE stories
     SET story = CONCAT(story, $1::text)
     WHERE id = $2;
     `,
      ["testinggg", req.params.id]
    )
db.query(
      `
     UPDATE stories
     SET story = CONCAT(story, $1::text)
     WHERE id = $2;
     `,
      ["testinggg", req.params.id]
    )

无论如何感谢您的帮助!

问题在于,您可以插入到
CONCAT
中的值可能具有不同的数据类型,因为Postgres无法定义您将从使用它的上下文中插入的字段的数据类型。 我相信您可能希望使用完整的
PREPARE
语句来指定参数的数据类型

 db.query(`
     PREPARE test (int, text ) AS UPDATE stories SET story = CONCAT(story, $2) WHERE id = $1; 
     EXECUTE test ($1, $2);`,
     [req.params.id, 'text']
)

请看一看文档

结果表明,我可以通过在参数化值(本例中为1)后执行::文本来设置数据类型。以下是解决方案代码:

db.query(
      `
     UPDATE stories
     SET story = CONCAT(story, $1::text)
     WHERE id = $2;
     `,
      ["testinggg", req.params.id]
    )
db.query(
      `
     UPDATE stories
     SET story = CONCAT(story, $1::text)
     WHERE id = $2;
     `,
      ["testinggg", req.params.id]
    )
无论如何谢谢你的帮助