Node.js中Express带ID参数API调用返回空数组问题排查
问题根因
你遇到的问题是类型不匹配导致的过滤逻辑失效:
- Express 中通过
req.params.id获取到的路径参数是字符串类型,调用/achaar/products/1时取到的值为字符串"1" test_data.js里存储的商品id是数字类型,比如 id 为 1 的商品对应的值是数字1- 你使用严格相等运算符
===做匹配,该运算符会同时校验值和数据类型,两边类型不一致时会直接返回false,因此 filter 方法返回的结果是空数组。
修复方案
任选以下任意一种方案修改代码即可:
- 将路径参数转为数字后再做匹配
// 修改带id的路由里的过滤逻辑 var val = json_data.achaar.filter(function (x) { return x.id === Number(req.params.id) })
- 改用非严格相等运算符
==,该运算符会自动做隐式类型转换
var val = json_data.achaar.filter(function (x) { return x.id == req.params.id })
额外优化提示
你当前的带参路由逻辑只做了控制台打印,没有给请求方返回响应,需要在过滤逻辑后补充 res.json(val),否则请求会一直挂起直到超时。
内容的提问来源于stack exchange,提问作者H1rouge
相关产品推荐
相关产品推荐

