我无法在对Loopback(v3)API的Axios请求中使用变量。
什么有效? 如果我使用“ REST表示法”,则效果很好:
getInfo() {
axios.get('http://myIp/api/tabs?filter[where][name]=' + this.name).then(response => {
this.tabs = response.data
})
尚无法解决的问题:
我无法将“ REST表示法”转换为我希望在此处使用的“节点表示法”。
我已经尝试过的内容:
axios.get('http://myIp/api/tabs?filter={"where":{"name": this.name }}).then(response => {
this.tabs = response.data
})
我意识到在整个请求中用单引号引起来的变量插值是不可能的。但是,如果我使用双引号,我不知道如何转义用于保留词(例如“ where”,...
)的引号。在这种情况下使用变量的正确方法是什么?
答案 0 :(得分:1)
试试:
axios.get('http://myIp/api/tabs').then(response => {
this.tabs = response.data.filter(b => b.name === this.name)
它应该可以工作。 主要技巧是 response.data.filter() 然后在 filter() 中给出你的过滤逻辑。
答案 1 :(得分:0)
我建议运行以下命令:
let value = "John";
let filter = {
where: {
name: value
}
};
axios.get('http://myIp/api/tabs?filter=' + JSON.stringify(filter)).then(response => {
this.tabs = response.data
});
这样,您将确定对象的构造方式正确,并且不会将完整的对象传递给请求,也不会因打开和关闭方括号/括号而迷路
答案 2 :(得分:0)
好的,我会尝试将其分成较小的块,并且我需要添加另一个答案,因为评论太久了:
axios.get ('http://myIp/api/tabs?filter='+ JSON.stringify(filter))。然后(response => {...});
这需要一个URL作为字符串。由于它是GET请求,因此您不能以与请求url不同的形式传递变量作为变量,例如。 http://mypage.com?variable1=value1&variable2=value2
axios.get('http://myIp/api/tabs?filter='+ JSON.stringify(filter))。then(response => {
this.tabs = response.data
});
制作超级复杂的网址可能会让人感到沮丧,而且不可读。幸运的是,在回送中,您可以传入一个对象。但是要在GET请求中执行此操作,您需要将其作为字符串传递。因此,您可以在对象上调用JSON.stringify
以使其成为字符串。
axios.get('http://myIp/api/tabs?filter=' + JSON.stringify(filter))。then(response => {
this.tabs = response.data
});
然后,要将其传递到URL,您可以将URL与字符串化的过滤器对象连接起来,如下所示:
# one method
url + JSON.stringify(filter)
# another method
var filters = JSON.stringify(filter);
axios.get(`http://myapi.com?filter=${filters}`, function(...))
希望有帮助
答案 3 :(得分:0)
axios.get('http://myIp/api/tabs?filter={"where":{"name":'+this.name }})
.then(response => {
this.tabs = response.data