Kaltura媒体列表API的OrderBy过滤器失效问题求助
解决Kaltura Client媒体列表排序不生效的问题
嘿,我之前也踩过Kaltura API排序不生效的坑,看了你的代码,问题出在排序参数的传递方式或者值的正确性上,咱们来一步步解决它。
问题根源
你当前的代码里,虽然给media.listAction传了包含orderBy的对象,但有两个潜在问题:
- 你使用的
'CREATE_DATE_DESC'并不是Kaltura API接受的有效排序值,Kaltura的媒体条目排序参数有特定的格式(或者应该用官方提供的枚举值)。 - 部分Kaltura Client版本更推荐使用
KalturaMediaEntryFilter实例来传递过滤/排序参数,而非直接传对象字面量,这样能避免属性名或值的拼写错误。
修复方案
方案1:使用官方枚举值(推荐)
使用官方提供的枚举类型可以彻底避免拼写错误,编辑器还能提供自动提示:
const Promise = require('bluebird'); const kaltura = require('kaltura-client/KalturaClient'); // 导入媒体条目排序枚举 const KalturaMediaEntryOrderBy = require('kaltura-client/types/KalturaMediaEntryOrderBy'); // 导入媒体条目过滤器 const KalturaMediaEntryFilter = require('kaltura-client/types/KalturaMediaEntryFilter'); exports.getMediaList = Promise.method((client, pager) => { return new Promise(function (resolve, reject) { // 创建过滤器实例 const filter = new KalturaMediaEntryFilter(); // 设置排序规则为创建日期降序 filter.orderBy = KalturaMediaEntryOrderBy.CREATE_DATE_DESC; return kaltura.services.media.listAction(filter, pager) .execute(client) .then((response) => { resolve(response.objects); }) .catch((error) => { reject(error); }); }); });
方案2:直接使用API认可的字符串值
如果你不想引入枚举,需要确保传递的是API接受的正确字符串格式。对于创建日期降序,正确的字符串是"createdAtDesc":
const Promise = require('bluebird'); const kaltura = require('kaltura-client/KalturaClient'); exports.getMediaList = Promise.method((client, pager) => { return new Promise(function (resolve, reject) { return kaltura.services.media.listAction( { orderBy: "createdAtDesc" }, // 使用API认可的字符串值 pager ).execute(client).then((response) => { resolve(response.objects); }, (error) => { reject(error); }); }); });
补充说明
Kaltura API的排序参数采用字段名+排序方向的驼峰格式,比如:
createdAtDesc:创建日期降序createdAtAsc:创建日期升序nameDesc:名称降序
直接用枚举值就不用记这些规则,还能避免拼写错误,所以更推荐方案1。
内容的提问来源于stack exchange,提问作者Swapnil Patil
相关产品推荐
相关产品推荐

