You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express.js分页点击页码时参数重复问题求助

解决分页时URL重复追加参数的问题

问题根源在于你使用的fullUrl包含了当前URL的所有参数(包括之前的perPage和page),每次点击页码都会在这个URL后重复追加分页参数,导致URL参数冗余。

解决方案:生成仅含筛选参数的基础URL

  1. 修改后端代码(Index.js):
    过滤掉原始查询参数中的分页相关字段,生成只保留筛选条件的基础URL:

    let results = await db.collection("bookings").find(whereClause,
        {
          limit: perPage,
          skip: perPage * (Math.max(req.query.page - 1, 0) || 0)
        }
    ).toArray();
    
    // 解析并过滤查询参数,移除分页相关的perPage和page
    const queryParams = new URLSearchParams(req.query);
    queryParams.delete('perPage');
    queryParams.delete('page');
    
    // 构建基础URL:协议+主机+路径+筛选参数
    const baseUrl = `${req.protocol}://${req.get('host')}${req.path}` + 
                    (queryParams.toString() ? `?${queryParams.toString()}` : '');
    
    return res.render('search', { bookings: results, pages: pages, perPage: perPage, baseUrl: baseUrl });
    
  2. 修改分页模板代码:
    使用新的baseUrl来拼接分页参数,同时判断基础URL是否已有查询参数,选择用?还是&拼接:

    <nav aria-label="Page navigation example">
        <ul class="pagination flex-wrap">
          <% for (var i = 1; i <= pages; i++) { %>
            <li class="page-item">
              <a class="page-link" href="<%= baseUrl %><%= baseUrl.includes('?') ? '&' : '?' %>perPage=<%= perPage %>&page=<%= i %>">
                <%= i %>
              </a>
            </li>
          <% } %>
        </ul>
      </nav>
    

这样处理后,每次点击页码时,URL只会保留筛选参数和当前的分页参数,不会出现重复追加的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:50:35