获取的id过长导致精度丢失问题解决方法

获取的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过长导致精度丢失问题解决方法_第1张图片

根据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过长导致精度丢失问题解决方法_第2张图片
结果为空
很神奇,为啥刚刚明明获取到了数据,这次根据复制的id却是结果为空呢?
到数据库的表里面去查看了一下
数据库
震惊了,看到数据库的信息竟然跟遍历的结果不一样!!!
原来是因为number类型的id过长了,浏览器解决数据,超过2的53次方的数据全部省略后面的内容,导致id不一致,解决办法:

  1. 后台接口配置的字段类型的时候,将id的字段类型改为字符串类型
  2. 将id的长度改短。
    解决问题:
    获取的id过长导致精度丢失问题解决方法_第3张图片

你可能感兴趣的:(前端,node.js,vscode)