发送json对象或使用快速路径渲染视图

时间:2015-04-08 06:50:03

标签: javascript json node.js pagination

我有两条路线:/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);
  });
});

我担心我的架构。我的方法是否正确?我有两条具有相同功能和不同响应的路由。我应该以某种方式将这两条路线合并为一条吗?

1 个答案:

答案 0 :(得分:2)

嗯,我通常只有一条路线,在你的情况下/news可以收到2个可选的参数:pageSizepageNumber用于您的分页目的。如果这些参数不存在,那么你将提供前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 请求以加载额外记录。

我希望这能为这种方法带来光明。