Если вы используете connect-pg-simple
для своей базы данных Node.js, вы могли столкнуться с небольшим неудобством: числа с плавающей запятой возвращаются в Node.js в виде строк, а не числовых значений. В остальном connect-pg-simple
прекрасен, но это чертовски раздражает!
Что именно я имею в виду? Допустим, вы запускаете этот запрос:
SELECT name::TEXT, money::FLOAT, whatever::NUMERIC(2,8) FROM my_table
Результатом connect-pg-simple
является структура данных JavaScript, и вот как она будет выглядеть:
{ "name": "John Doe, "money": "343.545942", "whatever": "232.44" }
(И да, это еще одна статья, в которой я ни хрена не объясняю основы. Базовое руководство по connect-pg-simple
см., ну, connect-pg-simple
прямо здесь. Вы бы не столкнулись с этой проблемой, если бы не локоть в нее уже все равно…)
Конечно, вы можете преобразовать строку в числовое значение в JavaScript, так как вы, вероятно, уже используете отдельный сервис для обработки ваших материалов PostgreSQL. Но нет необходимости «вручную» исправлять результат после каждого вызова запроса. Вы можете просто обновить анализатор типов самого connect-pg-simple
:
import { types } from 'pg'; types.setTypeParser(1700, x => parseFloat(x));
Парсер номер 1700 предназначен для типов с плавающей запятой. Здесь мы переопределяем его, чтобы использовать ванильную функцию JavaScript parseFloat()
. Просто и легко! Теперь наши возвращаемые значения набираются правильно:
{ "name": "John Doe, "money": 343.545942, "whatever": 232.44 }