GET请求抛出错误:str.replace不是函数

时间:2018-01-24 12:59:58

标签: javascript http vuejs2

我正在努力应对在服务器上发出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 => { }) 

但是抛出同样的错误。不知道问题是什么?

2 个答案:

答案 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

解析它