在 MEAN Stack 中处理分页后端17 Mar 2025 | 4 分钟阅读 在我们之前的章节中,我们成功地将分页器添加到我们的前端。 我们成功地为分页器添加了一些属性并添加了页面事件。 现在,我们必须在后端工作,以便我们可以使用页面数据来缩小我们从后端检索的项目的数量。 我们将按照以下步骤编写分页器的后端代码 我们在 posts.js 文件中实现分页,我们在其中创建了一个用于获取帖子的路由。 我们将借助所谓的查询参数来做到这一点。 这些是我们可以添加到 URL 中的可选参数或信息片段。 我们可以将它们添加到 URL 的末尾,用问号与我们的域和路径分隔。 1) 我们可以通过访问 request 在我们的 express 应用程序的后端轻松检索信息片段。 我们使用“request.query”,它将保存解析后的查询参数信息。 我们将向您展示它是如何工作的。 我们只是将“request.query”对象记录到控制台,看看里面有什么。 ![]() 我们将保存该文件,我们的后端将重新启动。 我们在浏览器中打开一个新选项卡并输入 https://:3000/api/posts,这是我们的帖子路由,然后是问号。 之后,我们添加 pageSize 等于 2 和 page=1 或添加另一个参数,例如 something 等于 good。 查询参数由“&”分隔,所以我们将使用“&”符号分隔 pageSize、page 和 something,如下所示 https://:3000/api/posts?pagesize=2&page=1&something=good 如果我们输入,我们将检索所有帖子,这意味着我们仍然到达该路由,并且它像以前一样工作。 ![]() 在我们的服务器日志中,我们在那里看到了查询对象。 ![]() 2) 所以,这是我们检索到的数据,因为我们发送了一个请求,其中添加了这些查询参数到 URL。 因此,它们被方便地为我们解析,并允许我们使用它们来更改我们的 mongoose 查询,以缩小我们获取的帖子数量,这可以很容易地完成。 所以,我们将通过以下方式从查询对象中检索该数据 ![]() 3) 现在,我们要调整我们的 mongoose 查询,并且很酷的是,如果我们没有传递 pagesize 和 currentpage,那么 pageSize 和 CurrentPage 将未定义。 因此,我们将检查 PageSize 和 CurrentPage 是否未定义。 如果它们都包含有效值,则将执行“if 块”。 ![]() 4) 现在,我们可以构造两个不同的查询。 Post.find 用于获取所有帖子,然后调整一个以获取给定页面的帖子切片。 为此,我们将创建一个新常量,并将其命名为 postquery,因为 Mongoose 的酷炫之处在于我们可以通过链接多个查询方法来构建查询,这将缩小我们的查询,并且默认情况下,我们的 postquery 是 Post.find()。 在使用默认 postquery 创建常量之后,我们将用 postquery 替换 postmodel.find,如下所示 ![]() 5) 现在,如果我们有有效的 PageSize 和 CurrentPage 值,我们需要操纵查询,我们将在“if 块”中执行此操作。 在“if 块”中,我们将使用 Mongoose 提供的两种有用的方法。 第一个是 skip() 方法,这意味着我们不会检索所有帖子,而是跳过前 n 个帖子。 因此,我们将添加 “PageSize * [CurrentPage-1]” 作为参数。 如果我们位于第 2 页且页面大小为 10,它将跳过 10(10*2-1=10) 个帖子。 同样,如果我们位于第 3 页且页面大小为 10,那么它将跳过 20(10*3-1 = 10*2 = 20) 个帖子。 ![]() 这将跳过之前的页面。 6) 我们还希望缩小我们为当前页面检索的文档数量。 我们将通过链接另一种方法来做到这一点,即 limit() 方法。 此方法限制我们返回的文档数量。 在此方法中,我们只需传递 PageSize,因为如果每页有 10 个项目,那么我们需要将查询限制为仅返回 10 个项目。 ![]() 现在,我们得到了调整后的 postquery 并尝试执行它。 我们将 pagesize 设置为 2,将 currentpage 设置为 1。 当我们按下回车键时,我们将得到以下错误 ![]() 7) 收到此错误的原因是我们使用了无效类型。 限制字段应为数字。 默认情况下,如果我们从这些查询参数中提取内容,它将始终是一个字符串,因为它来自 URL。 我们需要在这里使用数字。 为了将它们转换为数字,我们只需在 pagesize 和 currentpage 前面添加一个加号,如下所示 ![]() 现在,我们保存它并再试一次。 ![]() 现在,我们的后端代码运行良好,在下一节中,我们将 angular 关联到它。 |
我们请求您订阅我们的新闻通讯以获取最新更新。