使用Axios和环回的“ where”过滤器中的变量

时间:2018-10-23 10:36:45

标签: axios loopbackjs

我无法在对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”,...

)的引号。

在这种情况下使用变量的正确方法是什么?

4 个答案:

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

好的,我会尝试将其分成较小的块,并且我需要添加另一个答案,因为评论太久了:

  1. axios.get

axios.get ('http://myIp/api/tabs?filter='+ JSON.stringify(filter))。然后(response => {...});

这需要一个URL作为字符串。由于它是GET请求,因此您不能以与请求url不同的形式传递变量作为变量,例如。 http://mypage.com?variable1=value1&variable2=value2

  1. 参数

axios.get('http://myIp/api/tabs?filter='+ JSON.stringify(filter))。then(response => {    this.tabs = response.data
});

制作超级复杂的网址可能会让人感到沮丧,而且不可读。幸运的是,在回送中,您可以传入一个对象。但是要在GET请求中执行此操作,您需要将其作为字符串传递。因此,您可以在对象上调用JSON.stringify以使其成为字符串。

  1. 串联

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