Как я могу установить порядок сортировки по умолчанию в 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;
    }],
   }
 };
Другие вопросы по тегам