Поймать ошибку SOAP в Javascript - PullRequest
0 голосов
/ 25 июня 2019

Мне нужен способ обработки ошибок SOAP в Javascript (React).Мои SOAP-запросы сделаны не напрямую из React, а из Node.js, который я использую в качестве прокси-сервера.

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

fetch("/FreePUOrderNo", {
      crossDomain: true,
      method: "POST",
      withCredentials: true,
      headers: {
        Accept: "text/xml",
        "Content-Type": "application/json"
      },
      body: JSON.stringify({
        puOrderNo: puOrderNo
      })
    }).then(response => response.text())
      .then(str => {
        dataAsJson = convert.xml2json(str);
        console.log(dataAsJson);

На данный момент, ответвыглядит примерно так:

{"elements":[{"type":"element","name":"s:Envelope","attributes":{"xmlns:s":"http://schemas.xmlsoap.org/soap/envelope/"},"elements":[{"type":"element","name":"s:Body","elements":[{"type":"element","name":"s:Fault","elements":[{"type":"element","name":"faultcode","attributes":{"xmlns:a":"urn:microsoft-dynamics-schemas/error"},"elements":[{"type":"text","text":"a:Microsoft.Dynamics.Nav.Types.Exceptions.NavNCLDialogException"}]},{"type":"element","name":"faultstring","attributes":{"xml:lang":"en-US"},"elements":[{"type":"text","text":"You cannot Modify or Perform Actions in Cancelled PU Order."}]},{"type":"element","name":"detail","elements":[{"type":"element","name":"string","attributes":{"xmlns":"http://schemas.microsoft.com/2003/10/Serialization/"},"elements":[{"type":"text","text":"You cannot Modify or Perform Actions in Cancelled PU Order."}]}]}]}]}]}]}

Итак, что я сделал, чтобы получить «Вы не можете изменять или выполнять действия в отмененном заказе PU».это:

if ("faultcode" in dataAsJson) {
          const res =
          dataAsJson["elements"][0].elements[0].elements[0].elements[1].elements[0].text;
          console.log(res);
        }

Я получаю эту ошибку:

Uncaught (in promise) TypeError: Cannot use 'in' operator to search for 'faultcode' in {"elements": .... }]]}}]}

Я не знаю, почему я получаю эту ошибку, так как я использую оператор 'in' с объектом.Кроме того, я не знаю других способов обработки ошибок в запросах SOAP.

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 26 июня 2019

Итак, мое текущее решение таково: я зашифровал ответ сервера, проверил, содержит ли он 'код ошибки' (или 'faultstring') с .includes, а затем проанализировал его, чтобы получить информацию, которую я хочу показать пользователю. ,

 .then(response => response.text())
      .then(str => {
        dataAsJson = convert.xml2json(str);
        const dataAsString = JSON.stringify(dataAsJson);
        if (dataAsString.includes("faultcode") === true) {
          const parseData = JSON.parse(dataAsJson);
          const res = parseData["elements"][0].elements[0].elements[0].elements[1].elements[0].text;
          alert(res);
        }

Не уверен, что это хорошее решение, поэтому любые идеи приветствуются!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...