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

如何在Node.js Express框架中获取URL查询参数的键名与对应值

实现方案

1. 获取动态查询参数键值

Express 框架中req.query会自动解析URL后的查询参数为对象,对于https://MY_LINK/post?1234=test这种单键值对的查询参数,可以通过Object.keys()直接获取键名:

// 路由不需要提前定义key、value路径参数
app.get('/post', (req, res) => {
  // 提取所有查询参数的键名
  const queryKeys = Object.keys(req.query);
  // 校验是否传入查询参数
  if (queryKeys.length === 0) {
    return res.status(400).send('缺少必要查询参数');
  }
  // 取第一个键名,就是示例中的'1234'
  const targetKey = queryKeys[0];
  // 对应的值就是示例中的'test'
  const targetValue = req.query[targetKey];
  
  // 后续业务逻辑
});

如果请求可能携带多个查询参数,可以根据业务需求调整取第几个键,或者遍历所有键值对拼接查询条件。

2. 安全改造建议

你当前直接拼接SQL的写法存在严重的SQL注入风险,恶意用户可以通过构造特殊参数执行任意SQL语句,建议做两层安全校验:

  • 列名白名单校验:提前定义允许作为查询条件的列,避免用户传入非法列名操作数据
  • 参数化查询:使用数据库驱动提供的占位符能力转义用户输入的参数值

以常用的mysql驱动为例,改造后的代码如下:

// 定义允许查询的列白名单,按需替换为你的业务字段
const ALLOWED_QUERY_COLUMNS = ['id', 'name', 'phone', '1234'];

app.get('/post', (req, res) => {
  const queryKeys = Object.keys(req.query);
  if (queryKeys.length === 0) {
    return res.status(400).send('缺少必要查询参数');
  }
  const targetKey = queryKeys[0];
  // 校验查询字段是否合法
  if (!ALLOWED_QUERY_COLUMNS.includes(targetKey)) {
    return res.status(400).send('非法查询字段');
  }
  const targetValue = req.query[targetKey];
  // 使用占位符构造SQL,??用于转义标识符(列名、表名),?用于转义值
  const sql = 'SELECT * FROM data WHERE ?? = ?';
  db.query(sql, [targetKey, targetValue], (err, result) => {
    if (err) {
      return res.status(500).send('数据查询失败');
    }
    res.send(result);
  });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:48:04