如何遍历后端全量数据,根据指定ID提取第三方服务返回的对应数据
问题根因
findById是Mongoose专属的数据库查询方法,只能作用于Mongoose定义的集合模型,你现在拿到的是axios请求返回的普通响应对象,本身没有这个方法,调用自然不会生效。- axios返回的响应里,接口返回的实际业务数据存储在
response.data字段下,你需要先拿到对应的产品数组,再用原生JavaScript方法筛选目标条目即可。
实现逻辑
如果产品数据量不大,拉全量后本地筛选的方案完全可行,步骤如下:
- 从axios响应中取出产品列表数组,一般是
response.data,可以根据接口实际返回的结构调整取值层级 - 用JavaScript数组的
find方法匹配id一致的条目,注意如果接口返回的id是数字类型、url参数取到的是字符串类型,可以用宽松相等==匹配,或者统一转成同类型后再匹配 - 拿到匹配到的条目后就可以执行后续加入购物车的逻辑,记得增加空判断处理找不到对应id的情况
如果产品数据量很大,更推荐你让提供/products接口的服务新增按id查询的接口,直接传id查询目标条目,不用拉全量数据,性能会高很多。
修正后的代码示例
app.get('/add-to-cart/:id', async (req, res) => { try { const id = req.params.id; const cart = new Cart(req.body.cart ?? {}); const response = await axios.get('http://localhost:4200/products'); // 取出产品数组,根据实际接口返回结构调整 const productList = response.data; // 匹配指定id的产品 const targetProduct = productList.find(item => item.id == id); if(targetProduct) { // 此处补充你自己的购物车处理逻辑 cart.add(targetProduct, targetProduct.id); res.json({ code: 200, data: targetProduct, msg: '添加购物车成功' }) } else { res.status(404).json({ code: 404, msg: '未找到对应id的产品' }) } } catch (error) { console.error('接口处理失败', error); res.status(500).json({ code: 500, msg: '服务器内部错误' }) } });
内容的提问来源于stack exchange,提问作者Jan Tuđan
相关产品推荐
相关产品推荐

