【问题标题】:While performing multiplication returns Nan in nodeJs执行乘法时在nodeJs中返回Nan
【发布时间】:2019-11-07 06:18:12
【问题描述】:

我正在 nodejs 中尝试分页。而乘法它返回 Nan。我尝试了 parseInt,没有用。下面是我的代码

router.route('/imagecard/get/paginate/:pageno').get((req, res) => {

    let perpage=5;
    let pageNo=req.params.pageno;
    let query={};

    query.skip= parseInt( perpage )* (parseInt(pageNo) -1);
    console.log(parseInt( perpage ) * (parseInt(pageNo)-1));
    console.log(query.skip);
    query.limit=  perpage;

    ImageCard.find({}, {}, query, (err, data) => {
        if (err) {
            res.json({ "error": true, "message": "error fetching data" });
        } else {
            res.json(data);
        }
    }).sort({ "name": 1 });

});

这一行返回 Nan

query.skip= parseInt( perpage )* (parseInt(pageNo) -1);

这个我也试过了

query.skip = perpage * (pageNo - 1);

【问题讨论】:

  • 首先,试着找出你的pageNo变量的值。当您尝试从请求参数req.params.pageno 中检索它时,您很可能会得到undefined。尝试调试或简单地将值打印到控制台。
  • @Vaidas 所有变量都正确获取值,但是当我进行乘法运算时,它返回 Nan for query.skip

标签: node.js reactjs mongoose pagination


【解决方案1】:

发生这种情况的原因是parseInt 在您无法将该值转换为数字时返回NaNnullundefinedstring[]{})。

这部分可能发生在parseInt(pageNo),因为req.params.pageno 可能未定义。

如果需要,您可以做一些检查以使其为 0。

改变

let pageNo=req.params.pageno;

let pageNo = Number.isNaN(req.params.pageno) ? 0 : req.params.pageno;

req.params.pagenonull 或未定义时,添加|| 0 将使pageNo 变为0,您也可以将其更改为您想要的任何数字。

编辑:

也许你有错字?

不应该req.params.pageno

let pageNo = req.params.pageno;

成为req.params.pageNo

                 // capital N
let pageNo = req.params.pageNo;

编辑 2:

它只是返回0。如果传递的参数是2,返回0。不跳过已经显示的行

我刚刚测试过,参数2,它返回5。

我不确定你想做什么,不确定你想跳过多少,也许改变你的逻辑?或者不是0,而是1?现在你需要看看你有什么要求来解决这种情况。

完整代码

router.route('/imagecard/get/paginate/:pageno').get((req, res) => {

    let perpage=5;
    let pageNo = Number.isNaN(req.params.pageno) ? 0 : req.params.pageno;
    let query={};

    query.skip = parseInt( perpage )* (parseInt(pageNo) -1);
    console.log(parseInt( perpage ) * (parseInt(pageNo)-1));
    console.log(query.skip);
    query.limit = perpage;

    ImageCard.find({}, {}, query, (err, data) => {
        if (err) {
            res.json({ "error": true, "message": "error fetching data" });
        } else {
            res.json(data);
        }
    }).sort({ "name": 1 });

});

工作片段

    let reqParamsPageno = 2
    console.log('req.params.pageno', reqParamsPageno)
    let perpage = 5;
    let pageNo = reqParamsPageno;
    let query = {};
    query.skip = parseInt(perpage) * (parseInt(pageNo) -1);
    query.limit =  perpage;
    console.log('query', query);

【讨论】:

  • 我现在必须做出哪些改变
  • 试过了,它返回 Nan。我收到了所有的值。
  • @Karthi 不好意思,我忘记了一种情况,当变量是不能转换为数字的字符串时,它会是NaN,所以你需要在之前检查isNaN parseInt。我刚刚更新了我的答案。
  • 它只返回0。如果传递的参数是2,返回0。不跳过已经显示的行
  • @Karthi,检查我的编辑,确保你做对了。
猜你喜欢
  • 2017-09-19
  • 2021-06-04
  • 1970-01-01
  • 2015-03-09
  • 2019-05-30
  • 2019-02-20
  • 2020-05-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多