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

如何在Node.js的RESTful API中传递多参数实现用户查询?

修改后的代码实现

嘿,这事儿不难,我帮你把代码调整成符合你需求的版本,同时加了点健壮性处理,具体如下:

完整修改后的代码

var express = require('express');
var router = express.Router();

// 调整路由:移除路径参数,改用查询字符串获取参数
router.get('/api/v1/getUserByUID', function(req, res, next) {
  // 从URL查询字符串中提取uid和role参数
  const { uid, role } = req.query;

  // 先做参数校验,避免空查询或无效请求
  if (!uid || !role) {
    return res.status(400).json({ 
      error: '缺少必要参数,请同时提供uid和role' 
    });
  }

  // 执行带双条件的参数化SQL查询
  connection.query(
    'SELECT * from users where uid = ? and role = ?',
    [uid, role], // 参数顺序必须和SQL中的占位符一一对应
    function(error, results, fields) {
      if (error) {
        // 捕获数据库错误并返回友好提示
        return res.status(500).json({ 
          error: `查询失败:${error.message}` 
        });
      }
      // 返回查询结果,若未找到用户则返回空数组
      res.json({ 
        data: results,
        message: results.length > 0 ? '查询成功' : '未找到匹配的用户'
      });
    }
  );
});

关键修改点说明

  • 路由调整:去掉了原来的/:uid路径参数,因为现在是通过?uid=XXX&role=XXX这种查询字符串传递参数,不需要在URL路径中占位
  • 参数获取方式:用req.query.uid和req.query.role替代req.params.uid,req.query是Express自动解析URL查询字符串后生成的对象
  • SQL查询更新:在原SQL语句中添加了and role = ?的条件,同时在参数数组中传入uid和role,必须保证参数顺序和SQL占位符顺序一致(这是参数化查询防止SQL注入的关键)
  • 参数校验:增加了前置校验,如果用户没传uid或role,直接返回400错误,避免无效的数据库查询
  • 错误处理:完善了数据库错误的捕获和返回逻辑,给前端更清晰的错误提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:56:12