WIX Fetch API возвращает пустой JSON (VELO)

Обзор

Я использую AgileCRM. Я хотел бы создавать новые контакты в этой CRM, когда пользователи заполняют форму. Мне удалось сделать это в PostMan. Я пытаюсь выполнить простой запрос «GET» от WIX, чтобы я мог понять код VELO, прежде чем перейду к своему запросу POST (создать контакты).

Проблема

Когда я делаю запрос я получаю статус , В качестве ответа я получаю пустой JSON, а в заголовке моего запроса говорится, что мой метод POST это не то, что я определил как метод.

Вопрос

Что я делаю здесь не так, что вызывает как пустой ответ, так и неправильный метод?

Настраивать

Мой интерфейс импортирует бэкэнд-функцию, которая обрабатывает базовую аутентификацию и выборку. Я сделал это так, как когда я делал это из внешнего интерфейса, у меня возникла проблема с CORS.

      //agileapi.jsw
import {fetch} from 'wix-fetch';
import base64 from "nodejs-base64-encode";
import {getSecret} from 'wix-secrets-backend';

export async function getAPIKey() {
  return await getSecret("AGILERESTAPI");
}

export async function getUsername() {
  return await getSecret("AGILEUSERNAME");
}

let password = getAPIKey()
let username = getUsername()

let options = {
    "method": "GET",
    headers: {
        "Authorization": 'Basic ' + base64.encode(username + ":" + password, 'base64'),
        "Content-Type": "application/json",
    }
}
let url = "https://photodynamic.agilecrm.com/dev/api/contacts";
export async function getContacts() {
   await fetch(url, options)
    .then( (response) => {
        if(response.ok) {
            return response.json()
        }
        else {
            return Promise.reject('Fetch did not succeed');
        }}
    )
    .then((json) => console.log(json))
    .catch((err) => console.log(err));
}

//wix debug page code
import {getContacts} from 'backend/agileapi'

$w.onReady(function (){
   $w("#getContacts").onClick( (event) => {
        getContacts()
    })
});

2 ответа

Вы должны дождаться выполнения обещаний. Пароль и имя пользователя в вашем коде , это не строка , это обещание.

      //agileapi.jsw
import { fetch } from 'wix-fetch';
import base64 from "nodejs-base64-encode";
import { getSecret } from 'wix-secrets-backend';

const url = "https://photodynamic.agilecrm.com/dev/api/contacts";

export async function getContacts() {
  // Wait for until all promises to be fulfilled
  const [password, username] = await Promise.all([
    getSecret("AGILERESTAPI"),
    getSecret("AGILEUSERNAME")
  ])

  const options = {
    method: "GET",
    headers: {
      // Now the password and username are the strings
      "Authorization": 'Basic ' + base64.encode(username + ":" + password, 'base64'),
      "Content-Type": "application/json",
    }
  }

  // Returns the API result to client (browser)
  return fetch(url, options)
    .then((response) => {
      if (response.ok) {
        return response.json();
      }
      return Promise.reject('Fetch did not succeed');
    });
}

Код страницы

      import { getContacts } from 'backend/agileapi'

$w.onReady(function () {
  $w("#getContacts").onClick((event) => {
    getContacts()
      .then((json) => {
        // Your json
        console.log(json);
      })
      .catch((error) => {
        // Reason of error
        console.log(error)
      });
  })
});

Я смог решить эту проблему. Остальные api по умолчанию вернули xml. Добавление следующего в мои заголовки позволило мне отформатировать его как JSON.

      let options = {
"method": "GET",
    headers: {
        "Authorization": 'Basic ' + base64.encode(username + ":" + password, 'base64'),
        "Content-Type": "application/json",
        // added this to resolve the issue
        "Accept": "application/json"
    }

}

Это решение специфично для AgileCRM и может отличаться в зависимости от используемого вами API. Надеюсь, мой приведенный выше код поможет другим выполнять вызовы API с WIX Velo.

Другие вопросы по тегам