如何在FeathersJs

时间:2018-02-27 17:55:08

标签: sequelize.js feathersjs

我对Feathersjs有一个问题,与sequ​​alize集成。如果我像下面那样设置默认分页,并且没有指定排序,则会生成错误,因为生成的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 ) 
  }
}));

2 个答案:

答案 0 :(得分:2)

Feathers hooks允许您通过添加$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;
  }
});

答案 1 :(得分:0)

使用默认排序对我来说效果很好。例如。在某些模型中,您有一个字段 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;
    }],
   }
 };