Express 如何获取 GET 请求的 URL 参数?
Express 获取 GET 查询参数用 req.query(如 /search?q=node → req.query.q);路径参数用 req.params;表单 POST 体用 req.body。本文分清三者并给出完整示例。
查询字符串参数(?key=value)用 req.query;路由里的路径参数(/user/:id)用 req.params。
req.query:查询字符串
const express = require('express');
const app = express();
// 访问 /example?param1=hello¶m2=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 ?? [])。