首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WIX返回空JSON (VELO)

WIX返回空JSON (VELO)
EN

Stack Overflow用户
提问于 2021-05-14 15:00:40
回答 2查看 709关注 0票数 0

概述

我正在使用AgileCRM。当用户填写表单时,我想在这个CRM中创建新的联系人。我在PostMan中成功地做到了这一点。我试图从WIX做一个简单的“获取”请求,以便在进入我的POST请求之前能够理解VELO代码(创建联系人)。

问题

当我发出POST请求时,我得到了一个200状态,我得到了一个空的JSON作为响应,在我的请求头中说我的方法是一个GET,这不是我定义的方法。

问题

我在这里做错了什么,导致了一个空的响应和错误的方法?

设置

我的前端导入了一个后端函数,它处理基本的auth和获取。我是这样做的,就像当我从前端做这件事的时候,我遇到了一个CORS问题。

代码语言:javascript
复制
//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()
    })
});
EN

回答 2

Stack Overflow用户

发布于 2021-09-03 14:35:38

你得等到承诺兑现。代码中的密码用户名--这不是一个字符串,而是一个承诺。

代码语言:javascript
复制
//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');
    });
}

页面代码

代码语言:javascript
复制
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)
      });
  })
});
票数 1
EN

Stack Overflow用户

发布于 2021-05-14 16:45:05

我解决了这个问题。rest默认返回xml。通过将以下内容添加到我的标题中,我可以将其格式化为JSON。

代码语言:javascript
复制
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不同。希望我上面的代码能让其他人尝试用WIX进行API调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67536510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档