Sequelize не поддерживает некоторые типы данных JavaScript. Мы представляем один из способов использования «естественных» типов JavaScript с помощью Sequelize.
Sequelize изначально не поддерживает типы данных JavaScript Boolean, Date, Object и Array. Это затрудняет написание независимого от базы данных кода, совместимого с базами данных NoSQL. Также неудобно писать «естественный» JavaScript.
Нельзя избежать перевода некоторых типов данных JavaScript в формат, естественный для Sequelize. Вопрос в том, как это сделать наиболее удобным способом.
Хук sequelizeConvert
Перехватчики Feathers - это промежуточное программное обеспечение, которое запускается до или после вызова службы базы данных, и они являются очевидным местом для выполнения перевода.
Хук sequelizeConvert, недавно добавленный в библиотеку общих хуков Feathers, автоматизирует преобразование. Вы можете назвать это с
const { sequelizeConvert } = require('feathers-hooks-common'); const convert = { isVerified: 'boolean', verifyExpires: 'date', verifyChanges: 'json', passwordHistory: 'json', }; app.service('users').hooks({ before: { all: [ sequelizeConvert(convert) ] }, after: { all: [ sequelizeConvert(convert) ] }, }); app.service('users').create({ isVerified: false, verifyExpires: Date.now() + 60 * 60 * 24 * 2, verifyChanges: { email: '[email protected]' }, passwordHistory: [], });
Крючок преобразует:
- JavaScript Boolean true, false для Sequelize DataTypes.INTEGER 1 и 0.
- Типы дат, например Date.now () в DataTypes.DATE. Даты со значением
null
сохраняются какnull
by Sequelize и возвращаются в JavaScript какnull
. - Типы объектов и массивов в DataTypes.STRING с использованием JSON.stringify и JSON.parse.
Подпись ловушки sequelizeConvert(convert, ignores, conversions)
, где:
convert
- это объект, как показано выше. Имена реквизитов - это имена полей в записи. Допустимые значения:boolean
,date
иjson
.ignores
- это необязательный массив имен полей, который не нужно преобразовывать. В некоторых случаях удобно иметь отдельныйignore
, который отменяетconvert
.conversion
- необязательный объект, содержащий функции преобразования. Его можно использовать для отмены значения по умолчанию, используемого для каждого типа JavaScript. Функции по умолчанию:
const defaultConversions = { boolean: { sql: boolean => boolean ? 1 : 0, js: numb => !!numb, }, date: { sql: dateNow => dateNow, js: sqlDate => new Date(sqlDate).valueOf() || null, }, json: { sql: obj => JSON.stringify(obj), js: str => JSON.parse(str), } };
Преобразования происходят автоматически после того, как вы определяете хуки, и вам больше не нужно обращать на них внимание.
В заключение
Эта статья является частью серии статей об использовании Sequelize in Feathers. Подпишитесь на публикацию The Feathers Flightpath, чтобы быть в курсе будущих статей.
Как всегда, не стесняйтесь присоединяться к Feathers Slack, чтобы присоединиться к обсуждению или просто подкрасться.