请求与参数出现[object Object]问题排查(React+Rails)
解决React请求Rails后端时参数显示[object Object]的问题
问题原因
服务器日志里brand_id和user_id显示为[object Object],本质是前端传递的参数是对象类型,而非预期的字符串格式MongoDB文档ID。当对象被转成URL查询参数时,会默认调用toString()方法,结果就是[object Object]。
排查与修复步骤
1. 确认Cookie存储的内容类型
先看React控制台输出的bId和uId:如果控制台打印的是对象(比如{ _id: "62181bf113d9c187cb00004c", ... }),说明存入Cookie时错误地存储了整个对象,而非单独的ID字符串。
修复Cookie存入逻辑
确保存入bId和uId时,只存MongoDB的ID字符串:
// 示例:存入品牌ID(假设brand是Mongoose文档对象) Cookies.set('bId', brand._id.toString()); // 或直接存字符串ID(如果已经是字符串) Cookies.set('bId', '62181bf113d9c187cb00004c');
2. 前端请求时主动提取ID(如果Cookie已存对象)
如果无法修改存入逻辑,可在请求时从对象中提取ID:
export const fetchNavbarStats = () => (dispatch) => { const brandObj = Cookies.get('bId'); const userObj = Cookies.get('uId'); // 注意:如果Cookie存的是JSON字符串,需要先解析 const brandId = typeof brandObj === 'object' ? brandObj._id : JSON.parse(brandObj)._id; const userId = typeof userObj === 'object' ? userObj._id : JSON.parse(userObj)._id; dispatch(requestNavbarStats()); $.ajax({ method: 'get', url: `${process.env.REACT_APP_BASE_URL}/jwt_api/navbar_stats`, data: { brand_id: brandId, user_id: userId }, success(data) { dispatch(receiveNavbarStats(data)); }, error(xhr) { console.log(xhr) }, }); };
3. 验证参数传递
修复后,检查Rails服务器日志,应该能看到预期的MongoDB ID格式:
Started GET "/jwt_api/navbar_stats?brand_id=62181bf113d9c187cb00004c&user_id=58bd3736acce3487e7000001" for ::ffff:103.179.39.185 at 2022-11-29 07:08:58 +0000 Processing by JwtApi::NavbarStatsController#show as JSON Parameters: {"brand_id"=>"62181bf113d9c187cb00004c", "user_id"=>"58bd3736acce3487e7000001"}
内容的提问来源于stack exchange,提问作者Suhas Shinde
相关产品推荐
相关产品推荐

