Я повторно посетил запрос, который написал пару дней go, и, как и следовало ожидать, он чудесным образом сломался.
В основном он состоит из этого:
...
let filter = req.body.filter;
let filter_value = req.body.filter_value;
let filter_from = req.body.filter_from;
let filter_to = req.body.filter_to;
let filterSystem = (filter === "createdAt") ?
{[filter]:{
[Op.or]:[
filter_value,
{[Op.between]:[filter_from,filter_to]},
{[Op.between]:[filter_from,filter_value]},
{[Op.between]:[filter_value,filter_to]}
]
}}
: (filter === "favorites") ?
{[filter]:filter_value}
: {};
let results = await Promise.all([
await models.bookmark.findAll({
attributes:[
'guid',
'link',
'createdAt',
'description',
'favorites'
],
...
where:filterSystem
})
])
res.json({
length: results[0].length,
data: results[0]
})
...
Использование Почтальона для ввода данных к телу я могу видеть запрос go через консоль:
Если я введу даты «filter_from» и «filter_value» и пропущу все, кроме блока [filter_from, filter_value] -
Executing (default): SELECT `guid`, `link`, `createdAt`, `description`, `favorites` FROM `bookmarks` AS `bookmark` WHERE `bookmark`.`createdAt` BETWEEN '2020-04-30T15:34:48.877Z' AND '2020-04-30T15:37:00.170Z' ORDER BY `bookmark`.`createdAt` ASC LIMIT 0, 50;
Все, что он возвращает - пустой массив.
Если присутствуют все параметры поиска -
SELECT `guid`, `link`, `createdAt`, `description`, `favorites` FROM `bookmarks` AS `bookmark` WHERE (`bookmark`.`createdAt` BETWEEN '2020-04-30T15:34:48.877Z' AND NULL OR `bookmark`.`createdAt` BETWEEN '2020-04-30T15:34:48.877Z' AND '2020-04-30T15:37:00.170Z' OR `bookmark`.`createdAt` BETWEEN '2020-04-30T15:37:00.170Z' AND NULL) ORDER BY `bookmark`.`createdAt` ASC LIMIT 0, 50;
Возвращает только результат, соответствующий filter_value, хотя должен быть около 6.
Поиск без каких-либо фильтров возвращает все 8 результатов, используя «избранное» и «true» для «filter» и «filter_value» соответственно, работает отлично.
При создании запрос, я следовал за этим Запрос по диапазону дат для поля столбца в Sequelize
Что может ошибаться go - ISO 8601 устарел в одночасье? Но это формат, в котором база хранит все даты. Также не получая предупреждений / ошибок в консоли.