TypeError:data.filter不是函数

时间:2017-11-15 11:24:42

标签: javascript express requestjs

我正在尝试过滤arrayJSONAPI个对象,这是我proxy上的Node.js来电。我正在使用Express网络框架API进行{ data: [ { type: "aaa", name: "Cycle", id: "c949up9c", category: ["A","B"] }, { type: "bbb", name: "mobile", id: "c2rt4Jtu", category: ["C","D"] }, ... ] } 调用。

API会返回以下内容:

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));
});

server.js

{{1}}

我一直收到以下错误消息。

  

TypeError:data.filter不是函数

这里有什么明显的错误?任何人?

3 个答案:

答案 0 :(得分:0)

我认为你的错误在于考虑res比你预期的data

但是如果你看一下res,你应该找到data

因此您必须从data获取res并使用它。

例如:

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

度过美好的一天!

答案 1 :(得分:0)

我个人从来没有见过一个功能管道。我不认为这应该有用。在任何情况下:

您可以使用回调而不是管道。试试这个:

app.get('/products', (req, res) => {
 const options = {
 url: BASE_URL + '/products',
 json: true, //little convenience flag to set the requisite JSON headers
 headers: {
  'Authorization': 'hgjhgjh',
  'Accept': 'application/json'
 }
}
  request.get(options, sortDataByID);

});

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);
}

答案 2 :(得分:0)

我在进行单元测试时收到 TypeError:data.filter 不是函数。

我在结果中传递的是对象而不是数组。 gateIn$: of({}), 而不是 gateIn$: of([]),

gateIn$.pipe(takeUntil(this.destroy$)).subscribe(bookings => (this.dataSource.data = bookings));

一旦您看到错误就很明显,难点在于首先发现它。