Node.js服务端访问客户端传递的参数值出现undefined问题
问题根因
核心是Map键的严格类型匹配规则不满足:
- 客户端传递的
item.id为字符串类型(值为'1'、'2') - 服务端
storeItemsMap的键为数字类型(值为1、2) - ES6 Map匹配键时执行严格相等判断(
===),字符串'1'与数字1判断结果为不相等,因此get方法返回undefined
解决方案
按需选择以下任意一种方案即可:
方案1:服务端读取时做类型转换(最稳妥,兼容多客户端传值场景)
在调用get方法前,将客户端传入的id转为数字类型:
app.post("/purchase", (req, res) => { req.body.items.forEach(function(item){ console.log(item.id) // 字符串id转数字后再查询Map const storeItem = storeItems.get(Number(item.id)) console.log(storeItem) // 可正常获取到对应值 }) })
方案2:客户端传值时使用数字类型id
构造请求参数时,直接传入数字类型的id,无需服务端额外处理:
// 客户端items数组调整为 { id: 1, quantity: 1 } { id: 2, quantity: 1 }
方案3:调整服务端Map键的类型为字符串
将storeItems的键修改为和客户端传值一致的字符串类型:
const storeItems = new Map([ ['1', { price: 10000, name: "Assessment" }], ['2', { price: 20000, name: "Therapy" }], ])
该方案适配性较差,若后续有其他逻辑使用数字键查询Map会出现兼容问题,优先推荐使用方案1。
内容的提问来源于stack exchange,提问作者jeril
相关产品推荐
相关产品推荐

