Ошибка типа: data.filter не является функцией
Я пытаюсь отфильтровать array
из JSON
объекты, которые я получаю от API
позвони на мой proxy
, Я использую Node.js
веб-фреймворк 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));
});
Я продолжаю получать следующее сообщение об ошибке.
Ошибка типа: data.filter не является функцией
В чем здесь очевидная ошибка? Кто-нибудь?
3 ответа
Лично я никогда не видел, чтобы трубопроводы функционировали. Я не думаю, что это должно работать. В любом случае:
Вы можете использовать обратный вызов вместо трубопровода. Попробуй это:
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);
}
Я думаю, что ваша ошибка думать res
это data
чем вы ожидаете.
Но если вы посмотрите внутрь res
вы должны найти data
,
так что вы должны получить data
от res
и использовать это.
Например:
const data = res.data;
request.get(options).pipe(sortDataByID(data))
Хорошего дня!
Я получил TypeError: data.filter не является функцией при модульном тестировании.
В результате я передавал объект, а не массив. gateIn$: of({}), вместо gateIn$: of([]),
gateIn$.pipe(takeUntil(this.destroy$)).subscribe(bookings => (this.dataSource.data = bookings));
как только вы видите ошибку, она довольно очевидна, в первую очередь это ее обнаружение.