使用nodeJS添加数字时的奇怪错误

时间:2018-02-08 07:12:31

标签: javascript node.js

所以这很可能很简单,但我花了一整天时间尝试不同的方法并使用Google搜索解决方案。

由于某种原因,当我使用+ 2个数字而不是将数字加在一起时,节点正在加入数字。

  Company.findById(req.id, (err, doc) => {

      if (err) {
          callback(err, err);
      } else {

          var i = doc.TotalGranted; // i.e number value of 200
          var e = doc.TotalAvailable; // i.e number value of 200

          var newTotalgranted = i + req.newNumber; // i.e number value of 100
          var newAvailable = e - req.newNumber; // i.e number value of 100

          doc.TotalGranted= newTotalgranted;
          doc.TotalAvailable= newAvailable;

          doc.save((err, doc) => {
              if (err) {
                  callback(err, err);
              }
              callback(null, 'success');
          });
      }
  });

现在而不是totalgranted = 300而不是200,100

如果它有帮助,这里是来自mongo的返回文档的相关部分,这些不包含在数组中

  TotalAvailable: 200,
  TotalGranted: 200,



newNumber: '100',

新号码是一个字符串,但它实际上来自返回的文件。所以也许我需要从我尝试过的字符串中转换newNumber但是无法解决它。

2 个答案:

答案 0 :(得分:1)

是的,你是对的,你的req.newNumber是一个字符串,所以javascript默认执行字符串连接。     Company.findById(req.id,(err,doc)=> {

  if (err) {
      callback(err, err);
  } else {

      var i = doc.TotalGranted; // i.e number value of 200
      var e = doc.TotalAvailable; // i.e number value of 200
      var newNumber = parseInt(req.newNumber);  // or use Number(req.newNumber) or (req.newNumber * 1)
      var newTotalgranted = i + newNumber; // i.e number value of 100
      var newAvailable = e - newNumber; // i.e number value of 100

      doc.TotalGranted= newTotalgranted;
      doc.TotalAvailable= newAvailable;

      doc.save((err, doc) => {
          if (err) {
              callback(err, err);
          }
          callback(null, 'success');
      });
  }
});

这可行,但最好的方法是从请求参数本身获取一个数字,这将减少将字符串转换为整数的开销

您可以从字符串here

了解有关数字转换的各种策略的详情

答案 1 :(得分:1)

尝试,

Company.findById(req.id, (err, doc) => {

  if (err) {
      callback(err, err);
  } else {

      var i = doc.TotalGranted; // i.e number value of 200
      var e = doc.TotalAvailable; // i.e number value of 200

      var newTotalgranted = (i + (req.newNumber * 1)); // i.e number value of 100
      var newAvailable = (e - (req.newNumber * 1); // i.e number value of 100

      doc.TotalGranted= newTotalgranted;
      doc.TotalAvailable= newAvailable;

      doc.save((err, doc) => {
          if (err) {
              callback(err, err);
          }
          callback(null, 'success');
      });
  }
});