获取的id过长导致精度丢失问题解决方法
在用node.js编写接口时,遇到了一个有趣的问题。
获取所有菜品的接口
// 查询所有菜品
exports.getAllDish = (req,res)=>{
const sql = `select * from dish`
db.query(sql,(err,results)=>{
if(err) return res.cc(err)
return res.send({
status:0,
message:'获取菜品成功!',
data:results
})
})
}
运行结果:
根据id获取查询菜品
// 根据id查询菜品
exports.getDishById = (req,res)=>{
const sql = `select * from dish where id=?`
console.log(req.params.id)
db.query(sql,req.params.id,(err,results)=>{
console.log('results',results)
if(err) return res.cc(err)
if(results.length !== 1) return res.cc('获取菜品失败了噢!')
return res.send({
status:0,
message:'获取菜品成功!',
data:results[0]
})
})
运行结果:
很神奇,为啥刚刚明明获取到了数据,这次根据复制的id却是结果为空呢?
到数据库的表里面去查看了一下
震惊了,看到数据库的信息竟然跟遍历的结果不一样!!!
原来是因为number类型的id过长了,浏览器解决数据,超过2的53次方的数据全部省略后面的内容,导致id不一致,解决办法:
- 后台接口配置的字段类型的时候,将id的字段类型改为字符串类型
- 将id的长度改短。
解决问题: