Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeError:data.filter不是函数_Javascript_Express_Requestjs - Fatal编程技术网

Javascript TypeError:data.filter不是函数

Javascript TypeError:data.filter不是函数,javascript,express,requestjs,Javascript,Express,Requestjs,我正在尝试过滤JSON对象的数组,这是我从代理上的API调用中获得的。我正在使用Node.jswebframeworkExpress进行API调用 API返回以下内容: { data: [ { type: "aaa", name: "Cycle", id: "c949up9c", category: ["A","B"] }, { type: "bbb", name: "mobile",

我正在尝试过滤
JSON
对象的
数组
,这是我从
代理
上的
API
调用中获得的。我正在使用
Node.js
webframework
Express
进行
API
调用

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不是函数


这里明显的错误是什么?有人吗

我认为你的错误是认为
res
数据
超出了你的预期

但是如果您查看
res
内部,您应该会找到
数据

因此,您必须从
res
获取
数据
,并使用它

例如:

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

祝你今天愉快

我个人从未见过函数的管道。我认为这不应该奏效。无论如何:

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

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

函数sortDataByID(err、response、data){//回调必须包含3个参数
如果(错误){
返回res.json(err);//确保没有错误
}
如果(response.statusCode<200 | | response.statusCode>299){//检查是否存在非错误状态代码
返回res.status(400).json(err)
}
让dataToReturn=data.data.filter(函数(项){//data.data,因为您需要访问响应主体上的数据属性。
return item.id==“c949up9c”;
}
res.json(dataToReturn);
}

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

我在result.gateIn$:of({})中传递了一个不是数组的对象,而不是gateIn$:of([])

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


一旦你看到了错误,这是非常明显的,困难的一点是首先发现它。

稍作修改,你的解决方案实际上就起作用了。只是缺少了
JSON.parse(data)。data.filter(…)
。它确实需要解析。
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);
}