【问题标题】:send json object or render a view with express route发送 json 对象或使用快速路由渲染视图
【发布时间】:2015-04-08 15:08:39
【问题描述】:

我有两条路线:/news/news-paginate(我知道这是一个不好的 URL,但 atm 没关系)。在 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);
  });
});

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

【问题讨论】:

    标签: javascript json node.js pagination


    【解决方案1】:

    嗯,我通常有一条路线,在您的情况下为/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 请求来加载额外的记录。

    我希望这对我们的方法有所启发。

    【讨论】:

    • 谢谢安德烈。问题是我有两种不同的反应。一个函数以 json 对象响应,另一个函数呈现视图。
    • aw...我明白了.. 那么在这种情况下,2 条路线是要走的路。如果你传递一个对象而不是渲染一个视图,你可以选择一条路线。
    猜你喜欢
    • 2013-03-31
    • 1970-01-01
    • 2014-05-27
    • 2021-06-26
    • 2016-11-06
    • 2018-08-08
    • 2018-08-06
    • 2021-02-02
    • 1970-01-01
    相关资源
    最近更新 更多