javascript - 使用 Request (Node.js) 循环访问多个 url

标签 javascript node.js express request

我目前有一个 app.get() 方法,它使用 request 和 Cheerio 从 iTunes 评论中提取 html。

// get all reviews
app.get('/api/reviews', function(req, res) {
  var options = {
    url: 'https://itunes.apple.com/WebObjects/MZStore.woa/wa/customerReviews',
    qs: {
     'displayable-kind': '11',
     'id': 'XXXXXXXXX',
     'page': i,
     'sort': '4'
    },
    headers: {
      'User-Agent': 'iTunes/10.3.1 (Macintosh; Intel Mac OS X 10.6.8) AppleWebKit/533.21.1',
      'X-Apple-Store-Front': '143441-1,12',
      'X-Apple-Tz': '-18000',
      'Accept-Language': 'en-us, en;q=0.50',
    }
  } 

  request(options, function(error, response, html) {
    // load html, parse, do work, etc.
    // res.send(results);
  }     
};

我想迭代这个 url 调用,其中“page”查询是一个变量,如下所示。我收到“错误:发送后无法设置 header ”。尝试这种方式时出错。您如何更改 header 并进行另一个 url 调用?

app.get('/api/reviews', function(req, res) {
  for(var i = 0; i < 4; i++) {
    var options = {
      url: 'https://itunes.apple.com/WebObjects/MZStore.woa/wa/customerReviews',
      qs: {
       'displayable-kind': '11',
       'id': 'XXXXXXXXX',
       'page': '1',
       'sort': '4'
      },
      headers: {
        'User-Agent': 'iTunes/10.3.1 (Macintosh; Intel Mac OS X 10.6.8) AppleWebKit/533.21.1',
        'X-Apple-Store-Front': '143441-1,12',
        'X-Apple-Tz': '-18000',
        'Accept-Language': 'en-us, en;q=0.50',
      }
    } 

    request(options, function(error, response, html) {
      // load html, parse, do work, etc.
    }
  }     
};

最佳答案

您遇到的问题是您尝试以 block 的形式发送结果页面,但这是行不通的。您可以通过收集所有请求结果然后将您需要的任何数据发送回客户端来解决此问题。

以下是使用 async 执行此操作的示例:

var async = require('async');

app.get('/api/reviews', function(req, res) {
  async.times(4, function(i, cb) {
      var options = {
        url: 'https://itunes.apple.com/WebObjects/MZStore.woa/wa/customerReviews',
        qs: {
         'displayable-kind': '11',
         'id': 'XXXXXXXXX',
         'page': i,
         'sort': '4'
        },
        headers: {
          'User-Agent': 'iTunes/10.3.1 (Macintosh; Intel Mac OS X 10.6.8) AppleWebKit/533.21.1',
          'X-Apple-Store-Front': '143441-1,12',
          'X-Apple-Tz': '-18000',
          'Accept-Language': 'en-us, en;q=0.50',
        }
      } 
      request(options, function(error, response, html) {
        // load html, parse, do work, etc.
        // var result = ...;
        cb(null, result);
      });
  }, function(err, results) {
    // completed processing of all items
    // array of `request` results are stored in results
    // send data to client here
  });
});

关于javascript - 使用 Request (Node.js) 循环访问多个 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24558228/

相关文章:

javascript - 如何查找已在同一浏览器的另一个选项卡中打开的 URL

node.js - 无法使用expressjs和nodejs发送电子邮件

node.js - 我可以从快速请求处理程序或中间件发出获取请求吗?

javascript - 更好的编写读取文件/写入文件的nodejs函数的方法

javascript - Mongodb 非重复计数和位置

javascript - 使用 jquery 创建图像 slider 时出现问题

javascript - CSS flex最后一个不完整的行元素采用完整行元素的宽度

javascript - Gruntfile 任务未正常运行

mysql - 从刚插入的行中检索数据(MySql 和 Node.js)

node.js - JWT 负载中应该包含多少信息?