You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js服务端访问客户端传递的参数值出现undefined问题

问题根因

核心是Map键的严格类型匹配规则不满足:

  • 客户端传递的item.id为字符串类型(值为'1'、'2')
  • 服务端storeItems Map的键为数字类型(值为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:24:04