如何在 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;
}],
}
};
我在使用 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;
}],
}
};