Express 如何获取 GET 请求的 URL 参数?

Express 获取 GET 查询参数用 req.query(如 /search?q=node → req.query.q);路径参数用 req.params;表单 POST 体用 req.body。本文分清三者并给出完整示例。

最佳实践
Node.js 事件循环与异步任务示意

查询字符串参数(?key=value)用 req.query;路由里的路径参数(/user/:id)用 req.params。

req.query:查询字符串

const express = require('express');
const app = express();

// 访问 /example?param1=hello&param2=world
app.get('/example', (req, res) => {
  const param1 = req.query.param1;   // 'hello'
  const param2 = req.query.param2;   // 'world'
  res.send(`收到: param1=${param1}, param2=${param2}`);
});

app.listen(3000);

不需要装任何东西,Express 自动解析。访问 /example?tag=a&tag=b 时 req.query.tag 是数组 ['a','b']。

req.params:路径参数

// 访问 /user/42
app.get('/user/:id', (req, res) => {
  res.send(`用户 ID: ${req.params.id}`);   // 42
});

三者别搞混

来源 例子 取值
查询字符串 /search?q=node req.query.q
路径参数 /user/:id req.params.id
POST 表单体 表单提交 req.body(需中间件)

常见坑

  • 所有 query 值都是字符串:?page=2 拿到的 '2' 是字符串,做数学运算先 Number(req.query.page);
  • 参数不存在是 undefined:给默认值 const page = req.query.page ?? 1;
  • 用户输入不可信:query 参数直接用进 SQL/命令前先校验(SQL 注入、命令注入)。

常见问题(FAQ)

Q:中文参数乱码?
Express 自动做 URL decode,正常不会乱码。真遇到说明客户端没有正确 encodeURIComponent,问题在调用方。

Q:能拿到原始的查询字符串吗?
可以,req.originalUrl 含完整路径+查询串,自行用 new URL(req.originalUrl, 'http://x').searchParams 解析。

Q:同名参数想强制当数组处理?
Express 对单值给字符串、多值给数组。统一处理:[].concat(req.query.tag ?? [])。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台