使用 node.js 应用中的 Request 模块发出 API 请求
Making API request using Request module in node.js app
我的 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
未定义?
而且我也想知道如果我想在这个请求包装器中执行函数,我需要像我一样将它包装在括号内吗?我确实遇到没有括号的语法错误。
您的代码存在一些问题:
(function (body) { /* ... */ })()
您正在调用不带参数的匿名函数。 body
因此在函数内部是 undefined
。您应该省略 IIFE - 它在这里对您没有帮助。
Object.keys(body.items)
Object.keys
returns 对象的 属性 名称数组。 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);
})
})
我的 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
未定义?
而且我也想知道如果我想在这个请求包装器中执行函数,我需要像我一样将它包装在括号内吗?我确实遇到没有括号的语法错误。
您的代码存在一些问题:
(function (body) { /* ... */ })()
您正在调用不带参数的匿名函数。 body
因此在函数内部是 undefined
。您应该省略 IIFE - 它在这里对您没有帮助。
Object.keys(body.items)
Object.keys
returns 对象的 属性 名称数组。 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);
})
})