Express REST API查询Postgres JSON列时绑定错误如何解决?
问题排查与修复方案
你代码中存在3个明确错误,修复后即可正常运行:
- 路由参数提取错误
你定义的路由路径为/authorsname/:name,请求参数挂载在req.params.name下,但代码中错误提取了不存在的req.params.author_name,该变量实际为undefined,导致数据库参数绑定失败。 - LIKE通配符拼接错误
直接在SQL语句中写$1%不符合pg库的参数绑定规范,pg无法正确识别这种拼接的占位符,需要将通配符%拼接到参数值中,而非写在SQL语句内。 - (你尝试的修改版额外错误)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
相关产品推荐
相关产品推荐

