Appearance
实现 search 扩展
同包导出
search 仅生成 ListItem,不应实现 loadDetail 或 sources。详情和播放仍由同一包中对应 type 的扩展提供。
js
{
type: "search",
id: "main",
title: "Demo Search",
search: async function (ctx, input) {
var query = (input.query || "").toLowerCase();
if (!query) {
return { items: [] };
}
return {
items: catalog.filter(function (item) {
return item.title.toLowerCase().indexOf(query) !== -1;
}),
};
},
}input.query 由 App 注入,不应从 params 中读取关键词。排序、范围等用户字段的声明与读取方式见参数。包级共享配置通过 ctx.settings 提供,详见设置。
空数组和抛错
| 情况 | 做法 |
|---|---|
| 关键词为空或没有匹配项 | 本仓库的 Demo 返回 { items: [] } |
| 缺少关键词且扩展需要拒绝请求 | 抛出 ExtensionError({ code: "invalid_params", ... });同一扩展必须始终采用一致的处理方式 |
| 上游不可用 | throw ExtensionError |
条目仅包含 ref、标题和海报等展示信息。简介和播放地址分别由 detail 和 playback 提供。