Переменная в фильтре "где" с Axios и Loopback - PullRequest
0 голосов
/ 23 октября 2018

У меня проблемы с использованием переменных в запросе Axios к API Loopback (v3).

Что работает? Если я использую «REST-нотацию», она работает хорошо:

 getInfo() {
   axios.get('http://myIp/api/tabs?filter[where][name]=' + this.name).then(response => {
     this.tabs = response.data
})

Что еще не работает:

Я не могу перевести «REST-нотацию» в «Node-нотацию», которую я предпочел бы использоватьВот.

То, что я уже пробовал:

axios.get('http://myIp/api/tabs?filter={"where":{"name": this.name }}).then(response => {
        this.tabs = response.data  
})

Я понимаю, что с одинарными кавычками вокруг всего запроса я не могу получить переменную интерполяцию.Но если я использую двойные кавычки, я не знаю, как избежать тех, которые используются для зарезервированных слов, таких как «где», ...

Каков будет правильный способ использования переменных в этом контексте?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

хорошо, я попытаюсь разделить это на более мелкие куски, и мне нужно добавить еще один ответ, потому что это слишком долго для комментария:

  1. axios.get

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

Ожидается URL-адрескак строкатак как это запрос GET, вы не можете передавать переменные в форме, отличной от URL запроса, например.http://mypage.com? Variable1 = value1 & variable2 = значение2

аргумент

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

Создание очень сложных URL-адресов может быть немного разочаровывающим и нечитабельным.к счастью, в loopback вы можете вместо этого передать объект.но чтобы сделать это в 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(...))

Надеюсь, это поможет

0 голосов
/ 25 октября 2018

Я предлагаю запустить что-то вроде этого:

let value = "John";

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

Таким образом, вы будете уверены, что объект построен правильно, и вы не передадите полный объект в запрос, также вы выиграли 't теряется с открывающими и закрывающими скобками / скобками

...