我想用AngularJS / Bootstrap客户端和Mongoose / Express服务器端对我的博客进行分页。实际上我打电话给我的休息API,它返回我在我的数据库中的每个博文:
服务器端 lib / controllers / blogs.js
/**
* List of Blogs
*/
exports.all = function(req, res) {
Blog.find().sort('-created').populate('creator', 'username').exec(function(err, blogs) {
if (err) {
res.json(500, err);
} else {
res.json(blogs);
}
});
};
我想获取实际页面上的内容,但我不知道如何操作,因为我正在调用GET / api / blogs。
服务器端 lib / config / routes.js
var blogs = require('../controllers/blogs');
app.get('/api/blogs', auth.ensureAuthenticated, blogs.all);
也许有人可以帮助我这样做?我对Node.js完全陌生。
答案 0 :(得分:1)
您需要做的是对数据进行分页,这意味着您需要一次只从数据库中返回前X项(即博客帖子)。像这样:
Blog.find().sort('-created').skip(10).limit(10).populate('creator','username').exec(function(err, blogs) {
if (err) {
res.json(500, err);
} else {
res.json(blogs);
}
});
这将返回#11 - #20的帖子。
答案 1 :(得分:1)
如果您的帖子不多,您可以在查询中使用.skip()
和.limit()
:
/**
* List of Blogs
*/
exports.all = function(req, res) {
Blog.find().sort('-created').skip(req.body.skip).limit(req.body.limit).populate('creator', 'username').exec(function(err, blogs) {
if (err) {
res.json(500, err);
} else {
res.json(blogs);
}
});
};
当您的收藏增长时,上述代码的性能不佳。 .skip()
计算您正在跳过的所有文档。
相反,您可以使用范围查询,如:
/**
* List of Blogs
*/
exports.all = function(req, res) {
Blog.find({_id: {$gt: req.body.lastId}).sort('-created').limit(req.body.limit).populate('creator', 'username').exec(function(err, blogs) {
if (err) {
res.json(500, err);
} else {
res.json(blogs);
}
});
};
最后一个代码的性能更好(即使您有数千个帖子)。但是你只有下一页和上一页,你不能直接跳到第n页。