如何在 FeathersJs 中设置默认排序顺序

How Can I set the default Sort order in 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 ) 
  }
}));

Feathers hooks allow you to modify the query to what you need by adding the $sort common query parameter如果没有设置:

app.service('/manifests').hooks({
  before(context) {
    const { query = {} } = context.params;

    if(!query.$sort) {
      query.$sort = {
        date: -1
      }
    }

    context.params.query = query;
  }
});

默认排序对我来说效果很好。例如。您在某些模型中有一个字段 sort_order

server/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;
    }],
   }
 };