Конвертировать строку в число node.js

Я пытаюсь преобразовать req.params в Number, потому что это то, что я определил в моей схеме для параметра года.

Я пробовал

req.params.year = parseInt( req.params.year, 10 );  

и

Number( req.params.year);

и

1*req.params.year;

но не работает. Мне нужно что-то установить?

Ответ 1

Вам не нужно ничего устанавливать.

parseInt(req.params.year, 10);

должен работать правильно.

console.log(typeof parseInt(req.params.year)); // returns 'number'

Каков ваш вывод, если вы используете parseInt? это еще строка?

Ответ 2

Использование parseInt() - плохая идея, главным образом потому, что она никогда не терпит неудачу. Также потому, что некоторые результаты могут быть неожиданными, например, в случае INFINITY.
Ниже приведена функция для обработки неожиданного поведения.

function cleanInt(x) {
    x = Number(x);
    return x >= 0 ? Math.floor(x) : Math.ceil(x);
}

См. Результаты ниже тестовых примеров.

console.log("CleanInt: ", cleanInt('xyz'), " ParseInt: ", parseInt('xyz'));
console.log("CleanInt: ", cleanInt('123abc'), " ParseInt: ", parseInt('123abc'));
console.log("CleanInt: ", cleanInt('234'), " ParseInt: ", parseInt('234'));
console.log("CleanInt: ", cleanInt('-679'), " ParseInt: ", parseInt('-679'));
console.log("CleanInt: ", cleanInt('897.0998'), " ParseInt: ", parseInt('897.0998'));
console.log("CleanInt: ", cleanInt('Infinity'), " ParseInt: ", parseInt('Infinity'));

результат:

CleanInt:  NaN  ParseInt:  NaN
CleanInt:  NaN  ParseInt:  123
CleanInt:  234  ParseInt:  234
CleanInt:  -679  ParseInt:  -679
CleanInt:  897  ParseInt:  897
CleanInt:  Infinity  ParseInt:  NaN

Ответ 3

Не полный ответ. Хорошо, так что это просто дополнение к информации о parseInt, которая по-прежнему очень актуальна. Экспресс не позволяет изменять объекты req или res вообще (неизменяемые). Поэтому, если вы хотите эффективно использовать/использовать эти данные, вы должны скопировать его в другую переменную (var year = req.params.year).