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
webframeworkExpress
进行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);
}