集成Flutterwave汇率API后出现CastError数值转换失败求助
以下是几个可能的核心问题点,按排查优先级排序:
异步调用未正确等待,导致outAmt未赋值
你的GetEqCurrency是异步函数,如果调用时没有加await,代码会直接跳过异步逻辑继续执行,此时outAmt可能是未完成的Promise或undefined,后续计算balance时用这个值会直接得到NaN。比如错误写法:const outAmt = GetEqCurrency(); // 缺少await const newBalance = user.balance - outAmt; // 此处outAmt是Promise,计算结果为NaN必须确保在使用
outAmt前,已经拿到异步返回的有效结果,要么加await,要么在.then()回调里处理后续逻辑。Flutterwave返回数据的解析逻辑错误
Postman能拿到正确结果,但代码里可能没正确提取转换后的金额。比如API返回的是嵌套结构(如{data: {converted_amount: 150}}),但你代码里直接取了response.converted_amount,导致拿到undefined,后续计算时转成NaN。建议在GetEqCurrency里打印返回的完整响应,核对字段路径是否和API返回结构完全匹配。outAmt的类型转换失败
即使API返回的是数字,也可能是字符串格式(比如"99.9"),如果直接存入要求Number类型的数据库字段(如MongoDB的balance字段),隐式转换可能失败;或者提取到的是null/空值,转成Number后就是NaN。需要显式做类型转换并校验:const rawAmount = await GetEqCurrency(); const outAmt = Number(rawAmount); if (isNaN(outAmt)) { throw new Error("兑换金额获取失败"); }balance计算逻辑引入NaN
替换amount为outAmt后,检查balance的计算逻辑:如果原有user.balance本身是null/undefined,或者outAmt是NaN,那么user.balance - outAmt的结果必然是NaN,存入数据库时就会触发CastError。GetEqCurrency未做错误捕获
可能GetEqCurrency调用Flutterwave API时其实出现了隐性错误(比如请求头缺失、参数格式不对),但你没加try/catch,错误被吞掉后outAmt变成undefined,进而导致后续NaN。给异步函数加上错误捕获,打印具体错误信息:async function GetEqCurrency() { try { const response = await axios.get(FLUTTERWAVE_API_URL, { params: ... }); return response.data.data.converted_amount; } catch (err) { console.error("汇率API调用失败:", err); throw err; } }
内容的提问来源于stack exchange,提问作者Pamela

