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

Angular16 HTTP Post传递多参数至MongoDB接口的问题求助

问题分析与解决办法

先看你代码里的几个核心错误点,逐一修正即可解决问题:

1. 前端URL拼接格式错误

你的UpdateCart方法里,拼接URL时_id和size之间缺少斜杠,导致最终URL变成/getProducts/updatecart/xxxL这类格式,和后端定义的/:_id/:size路由规则不匹配,后端无法正确识别两个参数。

修正后的前端代码:

UpdateCart(product:Product, _id:String, size:String):Observable<Product>{
  alert("Service update cart")
  // 用模板字符串拼接,确保_id和size之间有斜杠分隔
  return this.http.post<Product>(`${this.rootUrl}/getProducts/updatecart/${_id}/${size}`, {product})
}

2. 后端参数获取名称错误

后端路由里定义的路径参数是:_id,但你代码里写的是req.params.id,少了下划线,根本拿不到正确的_id值,这是导致报错的关键原因。

修正后的后端代码:

router.post('/getProducts/updatecart/:_id/:size', async(req,res)=>{  
  // 参数名要和路由里的定义完全一致:_id 而非 id
  const _id = req.params._id;
  const size = req.params.size;
  // 后续业务逻辑...
});

可选方案:用查询参数传递(替代路径参数)

如果不想把参数放在URL路径里,也可以用查询参数的方式传递,前端代码如下:

UpdateCart(product:Product, _id:String, size:String):Observable<Product>{
  const params = new HttpParams()
    .set('_id', _id)
    .set('size', size);
  // 将参数放在请求的params配置里
  return this.http.post<Product>(`${this.rootUrl}/getProducts/updatecart`, {product}, { params })
}

对应的后端路由和参数获取方式也要调整:

router.post('/getProducts/updatecart', async(req,res)=>{  
  // 从query对象里获取查询参数
  const _id = req.query._id;
  const size = req.query.size;
  // 后续业务逻辑...
});

另外提一句:你之前的addProductToCart接口,URL里addtocart和_id之间也没加斜杠,虽然当前能工作,但建议统一改成addtocart/:_id的格式,避免后续出现隐性问题。

内容的提问来源于stack exchange,提问作者user2280852

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:22:46