使用过滤器选项从axios获取列表-取消定义



我知道这是一个很受欢迎的问题,但我仍然没有得到答案。

我有一个axiox get,像这个

function query(filterBy) {
return axios.get(TOY_URL,{ params: { filterBy } })
.then(res=>res.data)
.catch(err => {
console.log('Couldn't load toys please try again',err);
})
}

在服务器端:

app.get("/api/toy", (req, res) => {
let { filterBy } = req.query;
if(filterBy !== undefined) filterBy=JSON.parse(filterBy)
else{console.log('why !!');}
toysService.query(filterBy).then((toys) => res.send(toys));

下一步是:

function query(filterBy){
console.log(filterBy);
const regex = new RegExp(filterBy.name, 'i')
return Promise.resolve(
gToys
.filter(toy => {
return regex.test(toy.name)
})
.filter(toy => {
const s = filterBy.inStock
return s === 'TRUE' ? toy.inStock : s === 'FALSE' ? !toy.inStock : toy
})
.filter(toy => {
return toy.type.includes(filterBy.type)
})
.sort((a, b) => {
if (filterBy.sortBy === 'NAME') {
return a.name > b.name ? 1 : a.name < b.name ? -1 : 0
} else if (filterBy.sortBy === 'PRICE') {
return a.price > b.price ? 1 : a.price < b.price ? -1 : 0
}
})
)
}

我得到一个错误:无法读取未定义的属性"name">

奇怪的是,在cmd上的所有console.log上,我得到的是:

{}
undefined
why !!
undefined
TypeError: Cannot read property 'name' of undefined ...
{ filterBy: '{"name":"","price":0,"type":"all","inStock":"all"}' }
{"name":"","price":0,"type":"all","inStock":"all"}
{ name: '', price: 0, type: 'all', inStock: 'all' }

我想得到一个列表(来grom gList(,即使我不做任何类型的过滤。

谢谢。

我认为查询参数可能是URL编码的

最新更新