我正在尝试过滤array
个JSON
个API
个对象,这是我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不是函数
这里有什么明显的错误?任何人?
答案 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));
一旦您看到错误就很明显,难点在于首先发现它。