You need to enable JavaScript to run this app. 如何将sort参数动态传入order配置实现查询结果动态排序
优惠活动
大模型
产品
解决方案
定价
更多

如何将sort参数动态传入order配置实现查询结果动态排序

自定义排序字段功能实现方案

核心问题

你之前的写法order: { sort: order }是将sort作为固定的排序字段名,并不会读取你提前声明的sort变量的值作为动态字段,因此无法实现自定义排序字段的效果。

实现方案

使用ES6计算属性语法实现动态字段绑定,同时增加字段合法性校验,避免非法参数引发报错或安全问题:

const search = query.search || '';
// 校验排序方向合法性,非法值默认用ASC
const order = query.order?.toUpperCase() === 'DESC' ? 'DESC' : 'ASC';
const sort = query.sort || 'id'; // 配置默认排序字段,避免空值
// 配置允许排序的字段白名单,根据你的实际业务字段调整即可
const ALLOW_SORT_FIELDS = ['id', 'username', 'email', 'createTime'];
const finalSort = ALLOW_SORT_FIELDS.includes(sort) ? sort : 'id';

const [data, total] = await this.userRepository.findAndCount({
    relations: ['role'],
    where: [{
        username: ILike(`%${search}%`),
        email: ILike(`%${search}%`)
    }],
    // 用计算属性名动态指定排序字段
    order: {
        [finalSort]: order
    },
    take,
    skip: (page - 1) * take
});

扩展说明

如果需要支持关联表字段排序(比如按role表的name字段排序),只需要调整order的写法为嵌套结构即可,示例:

order: {
    role: {
        [finalSort]: order
    }
}

同时把关联表的对应字段加到白名单里即可正常使用。

内容的提问来源于stack exchange,提问作者user16127241

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 23:45:07