2016-11-04 8 views
1

現在、私はFreeCodeCampのバックエンド開発認定を受けています。 Image Search Abstractionマイクロサービス(link)に行きました。私はバックエンドコードとしてNodeとExpressを使用しています。私はRequest libraryでGoogleカスタム検索apiにHTTPリクエストを行い、オブジェクトの配列を除いて返されたデータを利用することができます。私が通いオブジェクトにすべてのデータを入れて書いたコードは次のとおりです。ExpressおよびNode、http呼び出しは、要素が呼び出されたときに未定義の配列を返します。

request(url,function(err,result,body) { 
var images = []; 
var data = JSON.parse(body); 
data.items.forEach(function(val) { 
    var obj = { 
    image: val.pagemap.cse_image[0].src, 
    text: val.snippet, 
    source: val.link 
    } 
    images.push(obj); 
}) 
res.send(images); 

私はに実行している問題はval.pagemap.cse_image[0].srcです。私のLocalServerクラッシュため、要求を行った場合:

image: typeof val.pagemap.cse_image[0], 
           ^
TypeError: Cannot read property '0' of undefined 

val.pagemap.cse_imageリターン:

image: [ 
    { 
    src: "http://i1.kym-cdn.com/photos/images/masonry/001/172/636/cfd.gif" 
    } 
], 

typeof val.pagemap.cse_image戻り 'オブジェクト' とArray.isArray(val.pagemap.cse_image) trueを返します。しかし、最終的に追加されたものはすべて未定義に戻ります。 .lengthでも未定義のエラーがスローされます。

配列は配列自体が呼び出されたときに配列になりますが、プロパティの場合は呼び出さないと定義されません。

+1

リクエストしている実際のURLは何ですか?あなたがリンクしたページのものは、 'items'プロパティを含むオブジェクトで返信していないようです。オブジェクトの配列が表示されます。 – mscdex

+0

'https://www.googleapis.com/customsearch/v1?key= {API_KEY}&num = 10&cx = {CSE_ID}&searchtype = image&q = {TERM} ' –

答えて

0

実際にあなたのval.pagemap.cse_imageはこれを含んでいる場合:

image: [ 
    { 
    src: "http://i1.kym-cdn.com/photos/images/masonry/001/172/636/cfd.gif" 
    } 
], 

は、あなたの代わりにval.pagemap.cse_image.image[0].srcにアクセスする必要があります。

そうでなければ、問題はあなたのitemspagemapオブジェクトのないすべてが​​性質を持っている可能性があります。

+0

これはそれでした。イメージキーは、実際にはユーザーの情報を表示するために作成したオブジェクトの一部でした。しかし、そこにif文を投げて、cse_imageが存在することを確認して問題を解決しました。どうもありがとうございます。 –

関連する問題