在Web应用程序开发中,搜索和分页功能是必不可少的,它们可以极大地提高用户体验。本文将介绍如何使用Node.js和MongoDB创建一个带有搜索和分页功能的Web应用程序。
MongoDB
MongoDB是一种NoSQL数据库,它以JSON格式存储数据,非常适合处理大量结构化和半结构化数据。在这里,我们将使用MongoDB来存储我们的数据,并使用Mongoose作为MongoDB的Node.js驱动程序。
数据模型
在本示例中,我们将使用一个简单的数据模型——学生信息(Student),包括学生姓名(name)、年龄(age)和成绩(score)。下面是对应的MongoDB集合定义:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ------------- - --- ----------------- ----- - ----- ------- --------- ---- -- ---- - ----- ------- --------- ---- -- ------ - ----- ------- --------- ---- - --- ----- ------- - ------------------------- ---------------
添加数据
在这个示例中,我们将手动添加一些测试数据,以便展示搜索和分页功能。我们将这些数据插入到MongoDB集合中:
-- -------------------- ---- ------- ----- -------- - - - ----- -------- ---- --- ------ -- -- - ----- ------ ---- --- ------ -- -- - ----- ---------- ---- --- ------ -- -- - ----- -------- ---- --- ------ -- -- - ----- ------ ---- --- ------ --- -- -- -------------------------- -- - ----- ---------- - --- ----------------- ------------------ ---
搜索
要实现搜索功能,我们需要创建一个API端点(/api/search),该端点接收一个查询参数(query)和一个分页参数(page)。根据查询参数,我们将从MongoDB集合中获取所有学生信息,并筛选出符合查询条件的学生。为了支持分页,我们还需要在API端点中返回总记录数。
API端点
下面是搜索API端点的代码:
-- -------------------- ---- ------- ---------------------- ----- ----- ---- -- - ----- ----- - ---------------- ----- ---- - -------------- - ------------------------ - -- ----- ----- - -- ----- ---- - ----- - -- - ------ ----- ----- - --- ------------- ----- ----- ------ - - ----- ----- -- ----- ----- - ----- ------------------------------- ----- -------- - ----- -------------------- ----------- -------------- ---------- ------ ------ --------- -------- --- ---
在这个端点中,我们首先使用req.query获取查询参数和分页参数。然后,我们使用正则表达式构建一个查询过滤器,从MongoDB集合中获取符合条件的学生信息。最后,我们使用skip和limit方法来实现分页功能,并返回总记录数和学生信息数组。
前端代码
在前端,我们可以使用axios库来发送HTTP请求,并使用Vue.js来渲染数据。下面是搜索页面的代码:
-- -------------------- ---- ------- ---- --------- ------ ----------- ---------------- ------- --------------------------------- ------- ------- ---- ------------- ------------ -------------- ----- -------- ------- --- -------------- -- --------- ------------------- ------ ------------ ------- ------ ----------- ------- ------ ------------- ------- ----- -------- -------- ----- ------- ---------- - -- ----------------------------- -------- ---- --------- ------- ---------- - ----- - ------ ----------------------------- ------ ------ - --------------------------------------------------------- -------- ------------------------------------------------------------------------------