我的项目在https://immense-refuge-12167.herokuapp.com/上
如果我登录(电子邮件:a@a.com,密码:11111111,或注册然后登录),然后单击左上角的“浏览器”按钮,则控制台中将显示错误,如下所示:TypeError: Cannot use 'in' operator to search for '0'
它仅在Heroku上发生,而不在localhost上发生。
发生错误的代码是:
async mounted() {
if(this.$store.state.isUserLoggedIn){
const bookmarksOfThisUser = (await api.getAllBookmarks(this.$store.state.user.id)).data;
if(bookmarksOfThisUser.length != 0 && !!bookmarksOfThisUser){
for(var bookmark in bookmarksOfThisUser){
const song = (await api.getASong(bookmarksOfThisUser[bookmark]['songId'])).data;
this.bookmarks.push(song)
}
}
}
},
我意识到这可能是因为
bookmarksOfThisUser
的长度为0,所以我使用if(bookmarksOfThisUser.length != 0 && !!bookmarksOfThisUser)
防止了它,但是仍然发生错误。mounted
函数用于填充数据bookmarks
,默认情况下该数据为空数组。如下所示,使用此数据的元素是v-data-table
。 <v-data-table
:headers="headers"
:items="bookmarks"
:items-per-page="5"
class="elevation-1"
v-if="this.bookmarks.length != 0"
>
<template v-slot:item.action="item">
<v-btn class="primary" small v-bind:to="{name: 'viewSong', params:{
songId: item.item.id
}}">View</v-btn>
</template>
</v-data-table>
我还用
v-if
检查了它的长度,但是仍然出现错误...谁能给我一些关于我做错了什么的提示?为什么只在Heroku上而不在localhost上发生呢?
谢谢!
最佳答案
此代码可以检查它是否收到了预期的数据响应,然后处理该错误情况。
例如,您可以检查数据类型:
const response = await api.getAllBookmarks(this.$store.state.user.id);
const bookmarksOfThisUser = response.data;
if (Array.isArray(bookmarksOfThisUser)) {
for(var bookmark in bookmarksOfThisUser){
const song = (await api.getASong(bookmarksOfThisUser[bookmark]['songId'])).data;
this.bookmarks.push(song)
}
} else {
// example only of logging the data that is not as expected
console.log({response})
console.log({bookmarksOfThisUser})
}