如何向GET接口传递多个参数,为何请求未匹配到对应服务端路由
结论
你当前的路径参数传递思路和路由写法本身符合Express的路由匹配规则,没有原则性错误,请求无法命中路由基本是细节问题导致的,可按以下顺序排查:
常见问题排查点
- 先检查前端两个变量
numticket、carry的取值:不能是undefined、空值,也不能包含/这类特殊字符。如果变量异常,实际请求的路径层级会和后端定义的两层参数规则不匹配,比如carry为undefined时,请求路径会变成/demos/price/xxx/undefined,如果是传空值会出现连续斜杠,都无法匹配路由。 - 确认后端路由的注册顺序:Express会按代码的编写顺序从上到下匹配路由,如果有优先级更高、规则更宽泛的路由写在当前路由前面,会提前命中请求,不会走到你写的这个路由里。比如前置写了
app.get('/demos/price/*')这类通配路由,就会抢匹配。 - 打开浏览器控制台的网络标签,确认实际发出的请求完整路径、状态码:如果是跨域错误,先处理后端的CORS配置;如果是404状态码,把实际请求路径和后端路由规则做比对,确认层级是否一致。
- 注意你当前的路由处理函数没有给前端返回任何响应,就算路由命中,请求也会一直挂起直到超时,记得逻辑处理完补充
res.json()或者res.send()返回响应内容。
优化建议
如果你的参数可能携带特殊字符,更推荐用查询参数的方式传值,容错率更高:
前端写法调整为:
const response = await fetch(`http://localhost:5000/demos/price?ticket=${numticket}&carry=${carry}`);
后端路由调整为:
app.get('/demos/price', async(req, res)=>{ try{ let ticket = req.query.ticket; let carry = req.query.carry; // 业务逻辑处理 res.json({success: true}) } catch(err){ console.log(err.message); res.status(500).json({error: err.message}) } });
内容的提问来源于stack exchange,提问作者Shanu Peplum
相关产品推荐
相关产品推荐

