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
相关产品推荐
相关产品推荐

