如何简化搜索查询参数?

Posted

技术标签:

【中文标题】如何简化搜索查询参数?【英文标题】:How to simplify the search query parameter? 【发布时间】:2021-04-27 20:49:18 【问题描述】:

问题

我有一个带有indexName: 'movies' 的电影数据库。

假设我的查询是John,那么域是domain.tld/?movies[query]=John

我想将搜索查询参数简化为domain.tld/?keywords=John。我该怎么做?

我已经知道的

阅读docs后,我知道我必须以某种方式修改createURLparseURL

  createURL( qsModule, location, routeState ) 
    const  origin, pathname, hash  = location;
    const indexState = routeState['movies'] || ;
    const queryString = qsModule.stringify(routeState);

    if (!indexState.query) 
      return `$origin$pathname$hash`;
    

    return `$origin$pathname?$queryString$hash`;
  ,

...

  parseURL( qsModule, location ) 
    return qsModule.parse(location.search.slice(1));
  ,

【问题讨论】:

【参考方案1】:

经过一些尝试和错误,这里是一个解决方案:

  createURL( qsModule, location, routeState ) 
    const  origin, pathname, hash  = location;
    const indexState = routeState['movies'] || ; // routeState[indexName]
    //const queryString = qsModule.stringify(routeState); // default -> movies[query]
    const queryString = 'keywords=' + encodeURIComponent(indexState.query); // NEW

    if (!indexState.query) 
      return `$origin$pathname$hash`;
    

    return `$origin$pathname?$queryString$hash`;
  ,

...

  parseURL( qsModule, location ) 
    //return qsModule.parse(location.search.slice(1)); // default: e.g. movies%5Bquery%5D=john
    const query = location.search.match(/=(.*)/g) || []; // NEW
    const queryString = 'movies%5Bquery%5D' + query[0]; // NEW
    return qsModule.parse(queryString); // NEW
  ,

【讨论】:

以上是关于如何简化搜索查询参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用各种参数在猫鼬中进行搜索查询?

ASP搜索分页如何传递参数?

如何创建按特定参数过滤搜索的查询字符串?

如何同步 Redux 状态和 url 查询参数

Scikit 网格搜索参数(不是超参数)

如何在 C 中简化这个工作的二进制搜索代码?