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

Node.js通过PostgreSQL API按城市查询数据返回空结果求助

问题排查与解决

核心问题:路由冲突

你的两个接口路由格式完全一致:/data/:id 和 /data/:city,Express 会优先匹配先定义的路由。当你请求 localhost:3000/data/dallas 时,实际触发的是 getDataById 函数——它会把 dallas 转成 NaN(parseInt('dallas') 返回 NaN),执行 SELECT * FROM data WHERE id = NaN 自然返回空结果。

解决方案

修改城市查询的路由路径,与ID查询路由做明确区分,比如改为 /data/city/:city:

1. 调整路由定义

假设原路由代码是:

app.get('/data/:id', getDataById);
app.get('/data/:city', getDataCity); // 此路由会被上面的路由覆盖

修改为:

app.get('/data/:id', getDataById);
app.get('/data/city/:city', getDataCity); // 新增标识性前缀避免冲突

2. 验证参数获取(可选)

你的getDataCity函数逻辑本身无问题,可添加日志确认参数是否正确:

const getDataCity = (request, response) => {
    const city = request.params.city;
    console.log('当前查询城市:', city); // 控制台打印参数,确认是否正确获取
    pool.query('SELECT * FROM data WHERE city = $1', [city], (error, results) => {
        if (error) {
            throw error;
        }
        response.status(200).json(results.rows);
    });
};

3. 测试请求

使用新的接口地址发起请求:

$ curl localhost:3000/data/city/dallas

此时应该能返回预期的数据库结果。

额外排查点(若问题仍存在)

  • 检查大小写匹配:PostgreSQL默认区分大小写,确认请求的城市名称与数据库中city字段存储的内容完全一致(比如是否是Dallas而非dallas)。
  • 查看数据库执行日志:开启PostgreSQL的查询日志,确认实际执行的SQL语句是否与预期一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:02:26