节点:如何使用https模块对请求进行分页?

迈拉·迪亚兹·玛拉菲尼

我不知道如何使用https模块使用Node来分页请求

这就是问题:

给定一个字符串substr,我必须从电影数据库中检索信息。有多个要检索的页面。

查询应读取https://jsonmock.hackerrank.com/api/movies/search/?Title=substr&page=pageNumber,替换substrpageNumber

来自网站的查询响应是具有以下五个字段的JSON响应:

  • page: 当前页面

  • per_page:每页的最大结果数

  • total:搜索结果中的记录总数

  • total_pages:要获得所有结果,必须查询的总页数

  • data:包含电影信息的JSON对象数组

查询的响应为https://jsonmock.hackerrank.com/api/movies/search/?Title=spiderman&page=1

{
 "page": "1",
 "per_page": 10,
 "total": 13,
 "total_pages": 2,
 "data": [
    {
      "Title": "Italian Spiderman",
      "Year": 2007,
      "imdbID": "tt2705436"
    },
... //9 more responses
 ]
}

这是一种方法,尽管我查询了第一页:

const https = require('https');

const getMovieTitles = (substr) => {
  let currentPage = 1;
  https.get(
    `https://jsonmock.hackerrank.com/api/movies/search/?Title=${substr}&page=${currentPage}`,
    (res) => {
      console.log(res.statusCode);
      let all_chunks = [];
      res.setEncoding('utf8');
      let rawData = '';
      res.on('data', (chunk) => {
        rawData += chunk;
      });
      res.on('end', () => {
        const parsedData = JSON.parse(rawData);
        console.log(parsedData);
      });
    }
  );
};

getMoviTitles函数应返回一个字符串数组:

[ 
  "Italian Spiderman",
  "Superman, Spiderman or Batman",
  "Spiderman",
  "Spiderman",
  "Fighting, Flying and Driving: The Stunts of Spiderman 3",
  "Spiderman and Grandma",
  "The Amazing Spiderman T4 Premiere Special",
  "Amazing Spiderman Syndrome",
  "Hollywood's Master Storytellers: Spiderman Live",
  "Spiderman 5",
  "They Call Me Spiderman",
  "The Death of Spiderman",
  "Spiderman in Cannes"
]

那么,如何遍历page参数并处理接收到的数据?

徐伯

拉动页面后,getMovieTitles()应该检查是否还有更多页面-如果是,请循环至下一页,直到所有页面都被下载为止。

我添加了新的内部函数loadNextPage()来对您的代码进行实际工作,并将结果累积在dataUntilNow

const https = require('https');


function getMovieTitles(substr) {
  let currentPage = 0;
  let dataUntilNow = [];

  function loadNextPage() {
    currentPage++;
    console.log(`Fetching page ${currentPage}`);

    https.get(
      `https://jsonmock.hackerrank.com/api/movies/search/?Title=${substr}&page=${currentPage}`,
      (res) => {
        console.log(res.statusCode);
        let all_chunks = [];
        res.setEncoding('utf8');
        let rawData = '';
        res.on('data', (chunk) => {
          rawData += chunk;
        });
        res.on('end', () => {
          const parsedData = JSON.parse(rawData);
          dataUntilNow.splice(-1, 0, ...parsedData.data);

          const parsedPage = parseInt(parsedData.page);
          if (!isNaN(parsedPage) && typeof parsedData.total_pages == 'number' && parsedPage < parsedData.total_pages)
            loadNextPage();
          else
            console.log(dataUntilNow.map(e => e.Title));
        });
      }
    );
  };
  loadNextPage();
}

getMovieTitles('spiderman');

这会将期望的结果输出到控制台。如果要返回结果,则必须使用回调或Promise,因为它将异步可用。

例如:

function getMovieTitles(substr, next) {
...
              else
                next(dataUntilNow.map(e => e.Title));
...
getMovieTitles('spiderman', console.log);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

尝试使用节点请求进行身份验证

如何使用python请求进行多个api调用

如何正确使用Siege对GET请求进行基准测试?

如何防止使用异步请求进行多次验证?

如何在 Express 中使用请求进行 POST

如何使用NodeJ中的请求进行多个API调用?

sequelize是否可以使用嵌套的预加载来对嵌套的请求进行分页?

使用请求进行网页搜集-Python

Node.js请求模块....在主体中发送JSON以使用api请求进行API请求

Rails&Devise使用POST请求进行注销。如何将其更改为DELETE请求?

如何使用 Spring MVC 测试对多部分 POST 请求进行单元测试?

如何在Laravel 8中使用请求进行验证?

使用Python请求进行Twitter抓取时如何执行oauth

如何使用令牌身份验证对 Post 请求进行身份验证?

如何使用Android Studio和Web Api通过相同的请求进行发布和获取

Spring如何自动使用https进行请求?

如何对Django rest框架请求进行单元测试?

如何按IP地址对网页请求进行限制

如何按相关属性对获取请求进行排序?

如何在Laravel中未经请求进行验证

如何对Elasticsearch5.3查询请求进行统计?

如何通过 Restful 对 Mongoose 请求进行用户验证

对准备好的 AJAX 请求进行分页的最快和最安全的方法

使用HTTP请求进行进程间通信

使用带有 nodejs 的网络请求进行网页抓取

使用启用 Cookie 的 Python 请求进行 Web 爬网

使用python中的请求进行curl命令复制

使用Junit和Mock put请求进行测试

使用node.js请求进行重定向