При выполнении умножения возвращает Nan в nodeJs - PullRequest
1 голос
/ 25 июня 2019

Я пытаюсь разбить на страницы в 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);

1 Ответ

1 голос
/ 25 июня 2019

Причина, по которой это происходит, заключается в том, что parseInt возвращает NaN, когда вы не можете преобразовать это значение в число (null, undefined, string, [], {}).

enter image description here

И, вероятно, это происходит в этой части parseInt(pageNo), потому что req.params.pageno, вероятно, не определено.

Что вы можете сделать, это сделать некоторую проверку, чтобы сделать его 0, если хотите.

Изменить

let pageNo=req.params.pageno;

До

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

Добавление || 0 приведет к pageNo к 0, если req.params.pageno равно null или undefined`, вы также можете изменить его на любое число.

Edit:

Может быть, у вас есть опечатка?

Не должен req.params.pageno

let pageNo = req.params.pageno;

Be req.params.pageNo

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

Редактировать 2:

просто возвращает 0. Если переданный параметр равен 2, возвращает 0.не пропуская уже показанные строки

Я только что проверил, и с параметром 2 он возвращает 5.

enter image description here

Я не уверен, что вы хотите сделать, не уверен, сколько вы хотите пропустить, может быть, изменить свою логику? Или вместо 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);
...