【问题标题】:Making API request using Request module in node.js app在 node.js 应用程序中使用 Request 模块发出 API 请求
【发布时间】:2015-10-25 21:42:53
【问题描述】:

我的 node.js 应用中有以下请求调用

   request({ url:chanURL, qs:chanProperties}, function(err, response, body) {
      if(err) { console.log(err); return; }
      body = JSON.parse(body);

      (function (body) {
        Object.keys(body.items).forEach(function(item) {
            pid = item.contentDetails.relatedPlaylists.uploads;
            console.log(pid);
        })
      })();
    })

而且,我收到了TypeError: Cannot read property 'items' of undefined 在处理响应时。

我正在尝试使用的 JSON 对象是

{ kind: 'youtube#channelListResponse',
  etag: '"0KG1mRN7bm3nResDPKHQZpg5-do/B7stMlWJTBpmW2q34yWKIzz8fF8"',
  pageInfo: { totalResults: 1, resultsPerPage: 1 },
  items: 
   [ { kind: 'youtube#channel',
       etag: '"0KG1mRN7bm3nResDPKHQZpg5-do/vV2FFZUI5inz53NuQDJMTs3tdQk"',
       id: 'UCwy6X3JB24VTsDFqMwdO5Jg',
       contentDetails: [Object] } ] }

为什么说items 未定义?

我也想知道我是否想在这个请求包装器中执行该函数,我需要像我一样将它包装在括号内吗?我确实得到了没有括号的语法错误。

【问题讨论】:

    标签: javascript json node.js node-request


    【解决方案1】:

    您的代码存在一些问题:

    (function (body) { /* ... */ })()
    

    您正在调用匿名函数而没有参数。因此body 在函数内部是undefined。您应该省略 IIFE - 它在这里对您没有帮助。

    Object.keys(body.items)
    

    Object.keys 返回一个对象的属性名称数组。 body.items 是一个数组,所以你不需要使用它——你应该直接遍历对象。

    pid = item.contentDetails.relatedPlaylists.uploads
    

    contentDetails 是一个数组。如果您打算使用第一个元素,您的代码应为:item.contentDetails[0].relatedPlaylists.uploads

    进行这些更改后,您将获得:

    request({ url:chanURL, qs:chanProperties}, function(err, response, body) {
      if(err) { console.log(err); return; }
      body = JSON.parse(body);
    
      body.items.forEach(function(item) {
          pid = item.contentDetails[0].relatedPlaylists.uploads;
          console.log(pid);
      })
    })
    

    【讨论】:

    • 感谢您富有洞察力的回答,这真的很有帮助。您是否介意添加我的结构,以便我可以在链中调用另一个请求调用或使用回调?现在我得到了我的 Youtube 的播放列表 ID,我需要发出另一个类似的请求来获取使用这个播放列表 ID 的视频列表。我知道如何获取视频,但我不确定如何将这两个请求放在一起以最终获取视频数据。
    猜你喜欢
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多