我有两条路线:/news
和/news-paginate
(我知道这是一个不好的网址,但无论如何都不重要)。在news
路由中,我从数据库加载5条记录并渲染填充的视图。在/news-paginate
路由中,我根据客户端发送的页码和大小加载其他5条记录;此路由以JSON对象响应。
新闻路线
router.get('/news', function (req, res) {
...
connection.query(queries['news_list'], [language, +pageSize, +offset], function (err, rows) {
res.render('news', {news: rows});
});
});
新闻分页路线
router.get('/news-paginate', function (req, res) {
var language = 'RU';
var pageSize = req.query.pageSize;
var pageNumber = req.query.pageNumber;
var offset = (pageNumber - 1) * pageSize;
connection.query(queries['news_list'], [language, +pageSize, +offset], function (err, rows) {
res.json(rows);
});
});
我担心我的架构。我的方法是否正确?我有两条具有相同功能和不同响应的路由。我应该以某种方式将这两条路线合并为一条吗?
答案 0 :(得分:2)
嗯,我通常只有一条路线,在你的情况下/news
可以收到2个可选的参数:pageSize
,pageNumber
用于您的分页目的。如果这些参数不存在,那么你将提供前5个记录。如果这些参数存在,那么您将开始提供其他5条记录并基于计算的offset
。
router.get('/news/:pageSize?/:pageNumber?', function (req, res) {
var language = 'RU';
var pageSize = req.params.pageSize || 5;
var pageNumber = req.params.pageNumber || 1;
var offset = (pageNumber - 1) * pageSize; // If no params are provided than the offset should be 0
connection.query(queries['news_list'], [language, +pageSize, +offset], function (err, rows) {
res.json(rows);
});
});
我不熟悉express routes
中的可选参数,但我希望你能掌握这种方法背后的主要观点。
在列出前5个记录后,您可以执行 ajax 请求以加载额外记录。
我希望这能为这种方法带来光明。