pg nodejs 包导致“json 类型的输入语法无效”

Posted

技术标签:

【中文标题】pg nodejs 包导致“json 类型的输入语法无效”【英文标题】:pg nodejs package results in 'invalid input syntax for type json' 【发布时间】:2018-12-07 08:35:14 【问题描述】:

我的项目有以下设置,使用 pg node-postgres 包:

简单的表 'tmp' 如下所示:

根据jsonORG和postgres docs的对象:

"foo" : true

是语法上有效的 JSON,当使用 pgAdmin 查询工具时:

UPDATE tmp SET data = '"foo": false' WHERE id = '1'

工作正常,但是当我尝试使用 pg 通过我的快速路由更新我的表时:

router.put('/updateTMP', (req, res) => 
    // I use dummies in this case instead of req.body.someKey for testing purposes
    let dummyJSON = "foo":true;
    let dummyID = 1;
    pg.query(`UPDATE tmp SET data = '$dummyJSON' WHERE id = '$dummyID'`, (errUpdate, responseUpdate) => 
        if (!errUpdate)  // NO ERROR
            res.json(success: true, message: responseUpdate);
        
        else  // ERROR
            console.log(dummyJSON);
            console.log(errUpdate);
            res.json(success: false, message: errUpdate); 
        
    )
)

我从数据库中得到以下错误:

error: invalid input syntax for type json

我已经尝试过 postgresql 中的 to_json 函数和快速路由中 npm 中的 to-json package - 都得到相同的否定结果。

我是否缺少一些基本的理解,或者是一些格式/引用问题?

提前感谢您的想法! ;)

ps:是的 - 我已经阅读了 this 和 that 的文章..

【问题讨论】:

即使我尝试将 "":"" 传递给 postgresql 的 to_json() 函数,我也会收到以下错误:'could not determine polymorphic type because input has type "unknown"'.. 【参考方案1】:

我遇到了同样的问题。尝试使用 JSON.stringify() 将您的 JS 对象转换为字符串,然后再将其传递给查询,因为 pg 不会总是自动为您执行此操作。

请参阅 GitHub 上的 issue 了解更多信息。

【讨论】:

非常准确的答案,谢谢!

以上是关于pg nodejs 包导致“json 类型的输入语法无效”的主要内容,如果未能解决你的问题,请参考以下文章

nodejs模块pg操作postgres数据库

如何使用nodejs pg-promise库将带有uuid数组的记录插入pg表

sh Nginx + nodejs + pg

为啥带有redshift的nodejs pg总是只返回一行?

nodejs连接postgres

nodejs连接postgres