访问从客户端传递的nodejs中的值的问题

Issues in accessing values in nodejs passed from client side

我从客户端传递这个项目数组

{ id: '1', quantity: '1' }
{ id: '2', quantity: '1' }

如下图

# Javascript
fetch("/purchase", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      Accept: "application/json",
    },
    body: JSON.stringify({
      items: items,
    }),
  })

在服务器端,我访问从客户端传递的 item.id 并将相应的值映射到 storeItems 数组中,但在这里我变得不确定。

# Nodejs
const storeItems = new Map([
  [1, { price: 10000, name: "Assessment" }],
  [2, { price: 20000, name: "Therapy" }],
])


app.post("/purchase", (req, res) => { 

  
  req.body.items.forEach(function(item){
    console.log(item.id)  //this works   
    const storeItem = storeItems.get(item.id)
    console.log(storeItem)   //getting undefined
  })

})

那是因为 item.id 持有一个字符串并传递例如get 方法的“1”将导致 undefined,因为地图的键是 Number 类型。要解决此问题,您可以将字符串转换为数字或将项目 ID 存储为字符串而不是数字:

const storeItem = storeItems.get(Number.parseInt(item.id));

const storeItems = new Map([
  ["1", { price: 10000, name: "Assessment" }],
  ["2", { price: 20000, name: "Therapy" }],
])

在您的客户端,您将 id 项作为字符串传递

{ id: '1', quantity: '1' }
{ id: '2', quantity: '1' }

但在 node.js 地图中,您将地图定义为 integer

const storeItems = new Map([
  [1, { price: 10000, name: "Assessment" }],
  [2, { price: 20000, name: "Therapy" }],
])

有一些解决办法, 将 id 转换为

中的整数
const storeItem = storeItems.get(item.id)

并将item.id转换为整数

const storeItem = storeItems.get(parseInt(item.id))

你的节点 js 的最终结果将是这样的:

# Nodejs
const storeItems = new Map([
  [1, { price: 10000, name: "Assessment" }],
  [2, { price: 20000, name: "Therapy" }],
])


app.post("/purchase", (req, res) => { 

  
  req.body.items.forEach(function(item){
    console.log(item.id)  //this works   
    const storeItem = storeItems.get(parseInt(item.id)) //// change this line
    console.log(storeItem)   //getting undefined
  })

})