Как я могу установить порядок сортировки по умолчанию в FeathersJs
У меня есть проблема с Feathersjs, интеграция с sequalize. Если я установлю нумерацию страниц по умолчанию, как показано ниже, и сортировка не указана, это приведет к ошибке, поскольку созданный оператор SQL недопустим.
Сервис создан по умолчанию 5:
app.use('/manifests', service({
paginate: {
default: 5,
max: 25
}
}));
Сгенерированный оператор SQL (установка ограничения 20)
SELECT [id], ...etc
FROM [Manifest] AS [Manifest] OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY
Имеет смысл установить порядок по умолчанию, но я не уверен, как это сделать в сервисе.
Оператор SQL, которого я хочу достичь в этом случае:
SELECT [id], ...etc
FROM [Manifest] AS [Manifest] ORDER BY Date desc OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY
Я хотел бы как-то установить значение по умолчанию для этого..?
app.use('/manifests', service({
paginate: {
default: 5,
max: 25
}
sort:{
default: date -1 ( or something )
}
}));
1 ответ
Решение
Перехватчики перьев позволяют вам изменить запрос к тому, что вам нужно, добавив $sort
общий параметр запроса, если он не установлен:
app.service('/manifests').hooks({
before(context) {
const { query = {} } = context.params;
if(!query.$sort) {
query.$sort = {
date: -1
}
}
context.params.query = query;
}
});
Мне нравится сортировка по умолчанию. Например, в некоторых моделях есть поле sort_order.
сервер /app.hooks.js
module.exports = {
before: {
find: [() => {
const { query = {} } = context.params;
if (context.service.options.Model.attributes.sort_order && !query.$sort) {
Object.assign(query, { $sort: { sort_order: 1 } });
}
return context;
}],
}
};