我正在努力应对在服务器上发出GET请求的VueJS项目函数。它会抛出一个错误,而这个语法一直在网站的其他部分工作。
this.existingUsers = this.existingMembers.map(a => a.userId)
console.log(this.existingUsers)
this.usersResource = this.$resource('http://127.0.0.1:3000/api/users', {}, {}, {
headers: {
existingUsers: this.existingUsers
}
})
this.usersResource.get().then(response => {
// If server answer
if (response.body.success) {
// Good request
console.log('1')
} else {
// Wrong request
console.log('2')
}
}, _ => {
// The server doesn't answer
console.log('3')
})
}
在这种情况下,控制台会打印预期的existingUsers列表,但会抛出以下错误:
观察者“existingMembers”的回调错误:“TypeError: str.replace不是函数“
(代码在现有用户的观察器中执行)。
我试图将回调清空为:
this.existingUsers = this.existingMembers.map(a => a.userId)
console.log(this.existingUsers)
this.usersResource = this.$resource('http://127.0.0.1:3000/api/users', {}, {}, {
headers: {
existingUsers: this.existingUsers
}
})
this.usersResource.get().then(response => { })
但是抛出同样的错误。不知道问题是什么?
答案 0 :(得分:0)
从我看到的调试开始,标题不能以这种方式将数组传递给服务器。
我决定将数组作为字符串传递(
this.usersResource = this.$resource('http://127.0.0.1:3000/api/users', {}, {}, {
headers: {
existingUsers: this.existingUsers.toString()
}
)
并在另一侧将其重建为数组,但可能有其他解决方案/包允许通过HTTP GET请求直接发送数组。
答案 1 :(得分:0)
正如您在specification中所看到的,HTTP标头中没有关于值类型的文字。但是,据我所知,如果您使用其他库,则只能将String
作为标头值传递。
你的回答是正确的。但我建议你在这种情况下避免使用.toString
。
让我们想象一下existingMembers
之一没有userId
的情况。在这种情况下,您将获得existingUsers
类似["ID00101", undefined, "ID01001"]
的内容。在标题中执行.toString()
函数后,您将获得
标题:{ 现有用户:“ID00101 ,, ID01001” }
因此很难解析。
<强>解决方案强>
我建议使用JSON.stringify
function
所以你可以得到这样的字符串"["ID00101",null,"ID01001"]"
您的代码可以转换为
this.existingUsers = this.existingMembers.map(a => a.userId)
console.log(this.existingUsers)
this.usersResource = this.$resource('http://127.0.0.1:3000/api/users', {}, {}, {
headers: {
existingUsers: JSON.stringify(this.existingUsers)
}
})
this.usersResource.get().then(response => { })
然后使用JSON.parse
function