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

如何在Node.js REST API中通过指定ID端点读取MySQL数据?

解决Node.js通过路由参数获取指定ID数据库数据的问题

你的需求完全可以实现,问题出在路由参数获取错误和SQL查询参数绑定不正确上,以下是修正方案:

核心问题分析

  1. 你的路由定义是/profiles/:userids,这是路径参数,但你用了req.query.user_id来获取,这是针对?user_id=xxx这类URL查询参数的方式,和当前需求不匹配。
  2. SQL查询没有正确传递ID参数,且存在语法错误。

修正后的代码

app.get('/profiles/:userid', function (req, res) {
    // 从路径参数中获取ID,路由参数名需与这里保持一致
    let user_id = req.params.userid;
    // 建议提前初始化数据库连接,避免每次请求重复建立连接
    con.query("SELECT * FROM db2.Profiles WHERE id = ?", [user_id], function (err, result, fields) {
        if (err) {
            return res.json({error: err.message || err});
        }
        // 处理无匹配数据的情况
        if (result.length === 0) {
            return res.json({success: true, message: "未找到对应ID的数据", body: []});
        }
        res.json({success: 'get call succeed!', url: req.url, body: result})
    });
});

关键修改点说明

  • 路由参数获取:用req.params.userid替代req.query.user_id,/profiles/1中的1属于路径参数,对应路由定义里的:userid(建议把原路由的userids改成userid更符合语义)。
  • SQL参数绑定:使用"SELECT * FROM db2.Profiles WHERE id = ?"作为查询语句,将user_id放在数组中作为con.query的第二个参数,这是数据库驱动支持的预编译查询方式,既保证参数传递正确,又能避免SQL注入风险。
  • 连接优化:移除了每次请求的con.connect,如果数据库连接是全局初始化的,直接复用即可;若未初始化,建议在应用启动时建立连接,而非每次请求重复连接,避免性能损耗。
  • 空结果处理:增加了查询结果为空的判断,返回更友好的提示信息。

测试验证

现在访问https://../profiles/1时,user_id会被正确赋值为1,SQL查询将返回ID为1的数据;访问/profiles/2时同理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:58:27