diff --git a/lib/middleware/parameter.js b/lib/middleware/parameter.js index bc81559a1..54a3ab950 100644 --- a/lib/middleware/parameter.js +++ b/lib/middleware/parameter.js @@ -130,20 +130,27 @@ module.exports = async (ctx, next) => { } }; - if (ctx.query.filter || ctx.query.filter_title || ctx.query.filter_description || ctx.query.filter_author) { - if (ctx.query.filter) { - ctx.query.filter_title = ctx.query.filter; - ctx.query.filter_description = ctx.query.filter; - } + if (ctx.query.filter) { + ctx.state.data.item = ctx.state.data.item.filter((item) => { + const title = item.title || ''; + const description = item.description || title; + const author = item.author || ''; + const isFilter = title.match(makeRegex(ctx.query.filter)) || description.match(makeRegex(ctx.query.filter)) || author.match(makeRegex(ctx.query.filter)); + return isFilter !== null; + }); + } + + // 启用filter参数时,无效filter_title/description/author + if (!ctx.query.filter && (ctx.query.filter_title || ctx.query.filter_description || ctx.query.filter_author)) { ctx.state.data.item = ctx.state.data.item.filter((item) => { const title = item.title || ''; const description = item.description || title; const author = item.author || ''; let isFilter = true; - ctx.query.filter_title && (isFilter = isFilter && !title.match(makeRegex(ctx.query.filter_title))); - ctx.query.filter_description && (isFilter = isFilter && !description.match(makeRegex(ctx.query.filter_description))); - ctx.query.filter_author && (isFilter = isFilter && !author.match(makeRegex(ctx.query.filter_author))); - return !isFilter; + ctx.query.filter_title && (isFilter = isFilter && title.match(makeRegex(ctx.query.filter_title))); + ctx.query.filter_description && (isFilter = isFilter && description.match(makeRegex(ctx.query.filter_description))); + ctx.query.filter_author && (isFilter = isFilter && author.match(makeRegex(ctx.query.filter_author))); + return isFilter !== null; }); }