Vue+Laravel项目Axios请求返回数据与数据库不一致问题
问题排查与解决步骤
1. 排查axios响应解析逻辑
axios默认自动解析JSON响应,但JavaScript的Number类型存在精度上限(超过2^53的数字会丢失精度),可能导致大数值被近似处理。
- 先检查项目中是否修改过axios全局的
transformResponse配置,是否有第三方库干扰了JSON解析。 - 临时修改请求,手动解析响应文本验证:
axios.get('/你的接口地址', { responseType: 'text' }) .then(res => { const rawData = JSON.parse(res.data); console.log(rawData); // 查看partner字段是否保持原始值 })
2. 核对后端返回的字段类型
确认数据库中partner字段的类型:
- 如果是
bigint或超过16位的数值类型,JavaScript无法精确存储,需在Laravel模型中将其转为字符串返回:
// 在User模型中添加 protected $casts = [ 'partner' => 'string', ];
3. 检查前端响应拦截器
查看项目中是否存在axios.interceptors.response.use配置,确认是否有全局逻辑对partner字段做了格式化或修改。
4. 验证后端原始返回数据
在Laravel控制器中打印查询结果,确认后端输出的原始数据正确:
$users = User::where('role', 'partner')->select('id', 'partner')->orderBy('created_at', 'desc')->paginate(15); // 日志打印,查看storage/logs下的日志文件 Log::info($users->toArray()); return $users;
如果日志中的partner值正确,问题必然出在前端解析或处理环节。
5. 对比请求头细节
再次核对axios请求与直接访问接口的请求头,包括Accept、Content-Type、Authorization等,确认是否存在遗漏的差异导致后端返回不同结果。
内容的提问来源于stack exchange,提问作者SymmetricsWeb
相关产品推荐
相关产品推荐

