2017-11-15 2 views
0

オブジェクトのarrayをフィルタリングしようとしていますが、これはAPIから呼び出され、proxyとなります。私はNode.jsウェブフレームワークExpressを使用してAPIコールを行っています。TypeError:data.filterは関数ではありません

APIには、次の値を返します。

{ 
    data: [ 
    { 
     type: "aaa", 
     name: "Cycle", 
     id: "c949up9c", 
     category: ["A","B"] 
    }, 
    { 
     type: "bbb", 
     name: "mobile", 
     id: "c2rt4Jtu", 
     category: ["C","D"] 
    }, 
    ... 
    ] 
} 

server.js

function sortDataByID(data) { 
    return data.filter(function(item) { 
    return item.id == 'c949up9c'; 
}); 
} 

app.get('/products', (req, res) => { 
const options = { 
url: BASE_URL + '/products', 
headers: { 
    'Authorization': 'hgjhgjh', 
    'Accept': 'application/json' 
} 
} 
    request.get(options).pipe(sortDataByID(res)); 
}); 

私は次のエラーメッセージを取得しておきます。

TypeError: data.filter is not a function

明白な間違いは何ですか?誰でも?

答えて

0

私は個人的に機能にパイピングを見たことがありません。私はそれがうまくいくとは思わない。いずれにしても:

パイピングの代わりにコールバックを使用することができます。試してみてください:

});

function sortDataByID(err, response, data){ //the callback must take 3 parameters 

    if(err){ 
     return res.json(err); //make sure there was no error 
    } 

    if(response.statusCode < 200 || response.statusCode > 299) { //Check for a non-error status code 
     return res.status(400).json(err) 
    } 

    let dataToReturn = data.data.filter(function(item) { //data.data because you need to access the data property on the response body. 
     return item.id == 'c949up9c'; 
    } 

    res.json(dataToReturn); 
} 
+1

少し変更するだけで、ソリューションは実際に機能しました。 'JSON.parse(data).data.filter(...)'だけが見つかりませんでした。それは解析が必要でした。 – shaz

0

あなたの間違いはresがあなたが予想しているよりもdataだと思うと思います。

resを見てみると、dataが見つかります。

resからdataを取得して使用する必要があります。例えば

const data = res.data; 
request.get(options).pipe(sortDataByID(data)) 

は素敵な一日を!

関連する問題