我对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 )
}
}));
答案 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;
}],
}
};