как избежать амперсанда в полезной нагрузке запроса в IDE - PullRequest
0 голосов
/ 22 февраля 2020

error message

Мне нужно добавить следующую строку в запрос restdb:

&sort=_changed%26dir=-1

, чтобы она выглядела так (работает в Почтальоне ):

{"identifier": "impeachmentsage"}&sort=_changed&dir=-1

Я пробовал несколько способов избежать &, включая% 26 и символ амперсанда, за которым следует amp; , но независимо от того, что я получаю сообщение об ошибке с жалобой на наличие &. https://bixbydevelopers.com/dev/docs/reference/JavaScriptAPI/http#http -опции

function getNewsByName(altBrainsNames, $vivContext) {
 console.log('viv', $vivContext, altBrainsNames)
 dashbot.logIncoming("Getting news by name", "GetNewsByName", $vivContext, altBrainsNames);
  const url = properties.get("config", "baseUrl") + "content"
  console.log("i got to restdb.js and the url is ", url);
  console.log("AltBrainsNames is", altBrainsNames)
  ampersand = "&"
  const query = {
    apikey: properties.get("secret", "apiKey"),
     q: "{\"" + "identifier" + "\":\"" + altBrainsNames + "\"}" + ampersand+ "sort=_changed%26dir=-1"

  }
  console.log("query", query)
  const options = {
    format: "json",
    query: query,
    cacheTime: 0
  }

Пробовал пару дополнительных вещей.

var s = "sort=_changed%26dir=-1"

  const query = {
    apikey: properties.get("secret", "apiKey"),
     q: "{\"" + "identifier" + "\":\"" + altBrainsNames + "\"}",
     s: "sort=_changed%26dir=-1"
  }

Это приближается и испускает амперсанд, но s = после него является посторонним.

enter image description here

ОБНОВЛЕНИЕ:

, поэтому я также попытался создать полный URL-адрес и передать его с помощью параметра url в getURL, Обход параметра запроса Строка запроса должна быть парой ключ / значение, в то время как синтаксис restdb предусматривает несбалансированную пару пустое / значение, т. е. & sort ... вместо & s = sort. Если это так, либо getURL, либо restdb должны что-то изменить ...

url constructed

Ответы [ 2 ]

3 голосов
/ 24 февраля 2020

Параметры вашего URL-запроса должны быть просто JSON объектом, «запрос», который находится в объекте параметров - Биксби позаботится обо всех экранирующих значениях, необходимых

. Например:

  let url = "https://postman-echo.com/get"
  let options = {
    format: 'json',
    query: {
      identifier: "impeachmentsage",
      sorts: "_changed",
      dir: -1,
      blank: "",
      withAmper: "hello&world" 
    }
  };

  let response = http.getUrl(url, options) 
  console.log ("response = " + JSON.stringify(response));

В результате следующий URL-адрес вызывается

https://postman-echo.com/get?identifier=impeachmentsage&sorts=_changed&dir=-1&blank=&withAmper=hello%26world

. Я добавил «blank» в качестве примера передачи пустой строки / null и «withAmper», показывающий, что Bixby делает любое необходимое экранирование для вас .

К вашему сведению - если вам когда-либо понадобится экранировать URL-адрес, сборка в Javascript encodeURI работает хорошо

2 голосов
/ 25 февраля 2020

Большое спасибо @rogerkibbe! Размещение моего окончательного кода здесь, поскольку есть один или два небольших изменения, чтобы получить его в правильном формате для restdb.

const url = properties.get("config", "baseUrl") + "content";

  const q = "{\"" + "identifier" + "\":\"" + altBrainsNames + "\"}";

  const options = {
    format: "json", 
     headers: {
    'apikey': properties.get("secret", "apiKey"),
  },
  query: {
      q: q,
      //identifier: "impeachmentsage",
      sort: "_changed",
      dir: -1,
      //blank: "",
      //withAmper: "hello&world" 
    },
    cacheTime: 0
  }
...