Nodejs+express+ejs分页查询
时间: 2023-09-24 16:10:41 浏览: 155
基于NodeJs+Express+Mysql学生社团活动管理系统
以下是一个基于 Nodejs、Express 和 EJS 的分页查询实现示例:
首先,安装必要的依赖:
```
npm install express ejs mongoose express-flash express-session
```
然后,创建一个名为 `app.js` 的文件,引入所需模块:
```javascript
const express = require('express');
const mongoose = require('mongoose');
const session = require('express-session');
const flash = require('express-flash');
const bodyParser = require('body-parser');
const app = express();
const port = process.env.PORT || 3000;
// 连接 MongoDB 数据库
mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true, useUnifiedTopology: true});
// 定义数据库模型
const Article = mongoose.model('Article', {
title: String,
content: String,
created_at: Date
});
// 设置模板引擎和静态文件目录
app.set('view engine', 'ejs');
app.use(express.static(__dirname + '/public'));
// 设置 session 和 flash
app.use(session({
secret: 'mysecretkey',
resave: true,
saveUninitialized: true
}));
app.use(flash());
// 设置 bodyParser
app.use(bodyParser.urlencoded({ extended: true }));
// 定义路由
app.get('/', async function(req, res) {
const perPage = 5;
const page = req.query.page || 1;
const articles = await Article.find()
.skip((perPage * page) - perPage)
.limit(perPage);
const count = await Article.countDocuments();
const totalPages = Math.ceil(count / perPage);
res.render('index', {
articles: articles,
current: page,
pages: totalPages
});
});
app.listen(port, function() {
console.log('Server listening on port ' + port);
});
```
在 `views` 文件夹中创建一个名为 `index.ejs` 的文件,用于显示分页数据:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>分页查询</title>
</head>
<body>
<h1>文章列表</h1>
<% if (articles.length > 0) { %>
<ul>
<% articles.forEach(function(article) { %>
<li><%= article.title %></li>
<% }); %>
</ul>
<% } else { %>
<p>没有文章。</p>
<% } %>
<% if (pages > 1) { %>
<div class="pagination">
<ul>
<% if (current == 1) { %>
<li class="disabled"><span>«</span></li>
<% } else { %>
<li><a href="?page=<%= current - 1 %>">«</a></li>
<% } %>
<% for (var i = 1; i <= pages; i++) { %>
<% if (i == current) { %>
<li class="active"><span><%= i %></span></li>
<% } else { %>
<li><a href="?page=<%= i %>"><%= i %></a></li>
<% } %>
<% } %>
<% if (current == pages) { %>
<li class="disabled"><span>»</span></li>
<% } else { %>
<li><a href="?page=<%= current + 1 %>">»</a></li>
<% } %>
</ul>
</div>
<% } %>
</body>
</html>
```
在上面的示例中,我们使用了 `mongoose` 连接 MongoDB 数据库,并定义了一个名为 `Article` 的数据库模型。在路由中,我们使用 `await` 关键字来等待查询结果,并通过 `skip()` 和 `limit()` 方法来实现分页查询。在视图中,我们使用 EJS 模板引擎来生成分页链接。
阅读全文