You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express REST API查询Postgres JSON列时绑定错误如何解决?

问题排查与修复方案

你代码中存在3个明确错误,修复后即可正常运行:

  1. 路由参数提取错误
    你定义的路由路径为/authorsname/:name,请求参数挂载在req.params.name下,但代码中错误提取了不存在的req.params.author_name,该变量实际为undefined,导致数据库参数绑定失败。
  2. LIKE通配符拼接错误
    直接在SQL语句中写$1%不符合pg库的参数绑定规范,pg无法正确识别这种拼接的占位符,需要将通配符%拼接到参数值中,而非写在SQL语句内。
  3. (你尝试的修改版额外错误)JSON键名引号错误
    PostgreSQL中双引号用于标识表名、列名等系统标识符,普通字符串值需用单引号包裹,因此json_object_data ->> 'name'中的name必须使用单引号。

修复后完整代码

app.get("/authorsname/:name", async(req, res) => {
    // 提取正确的路由参数
    const { name } = req.params;
    try {
        const getAuthors = await pool.query(
            "select json_object_data from \"jason-elwood/authors\".\"authors\" where lower(json_object_data ->> 'name') like lower($1)",
            // 搜索值拼接前缀匹配通配符
            [`${name}%`]
        );
        // pg查询结果的业务数据存在rows字段中,直接返回即可
        res.json(getAuthors.rows);
    } catch (error) {
        console.error(error.message);
        // 新增错误返回,避免请求超时挂起
        res.status(500).json({ error: "查询作者信息失败" });
    }
});

内容的提问来源于stack exchange,提问作者Jason Elwood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:45:00